Jeśli jestem zalogowany do systemu za pośrednictwem SSH, czy istnieje sposób na skopiowanie pliku z powrotem do mojego systemu lokalnego bez uruchamiania innego terminala lub sesji ekranowej i robienia scp lub czegoś podobnego lub bez robienia SSH ze zdalnego systemu z powrotem do system lokalny?
257
scp file.foo [email protected]:file.foo
: POdpowiedzi:
Połączenie główne
Najłatwiej jest to zaplanować z wyprzedzeniem.
Otwórz połączenie główne za pierwszym razem. W przypadku kolejnych połączeń trasuj połączenia podrzędne przez istniejące połączenie główne. W swoim
~/.ssh/config
ustaw, aby udostępnianie połączenia odbywało się automatycznie:Jeśli rozpoczniesz sesję ssh do tego samego (użytkownika, portu, komputera) co istniejące połączenie, druga sesja zostanie tunelowana w pierwszej. Nawiązanie drugiego połączenia nie wymaga nowego uwierzytelnienia i jest bardzo szybkie.
Więc mając aktywne połączenie, możesz szybko:
scp
lubrsync
;Przekierowanie
W istniejącym połączeniu możesz ustanowić tunel zwrotny ssh. W wierszu polecenia ssh utwórz zdalne przekazywanie, przekazując
-R 22042:localhost:22
gdzie 22042 to losowo wybrany numer, który różni się od dowolnego innego numeru portu na zdalnej maszynie. Następniessh -p 22042 localhost
na komputerze zdalnym łączy się z powrotem z maszyną źródłową; możesz użyćscp -P 22042 foo localhost:
do skopiowania plików.Możesz to zautomatyzować za pomocą
RemoteForward 22042 localhost:22
. Problem polega na tym, że jeśli łączysz się z tym samym komputerem z wieloma instancjami ssh lub jeśli ktoś inny korzysta z portu, nie otrzymujesz przekierowania.Jeśli nie włączyłeś zdalnego przekazywania od samego początku, możesz to zrobić w istniejącej sesji ssh. Typ Enter
~C
Enter-R 22042:localhost:22
Enter. Aby uzyskać więcej informacji, zobacz „Znaki specjalne” w instrukcji.W tym wątku dotyczącym awarii serwera znajduje się również kilka interesujących informacji .
Kopiuj wklej
Jeśli plik jest mały, możesz go wpisać i skopiować i wkleić z wyjścia terminala. Jeśli plik zawiera znaki niedrukowalne, użyj kodowania takiego jak base64 .
Wygodniej, jeśli masz aktywne przekazywanie X, skopiuj plik na zdalnym komputerze i wklej go lokalnie. Możesz przesyłać dane do i z
xclip
lub zxsel
. Jeśli chcesz zachować nazwę pliku i metadane, skopiuj i wklej archiwum.źródło
Innym łatwym sposobem (IMO) byłoby:
Lub jeśli wolisz coś podobnego do GUI, wypróbuj Midnight Commander . Nazywają tę funkcję Shell-Link . Większość dystrybucji ma je w swoich systemach pakietów jako
mc
.źródło
mc
jest najszybszy w użyciu.tgz
Cały czas robię to z plikami :)SSH obsługuje kilka poleceń za pomocą znaku zmiany znaczenia (
~
domyślnie):!args
Wydaje się być najbliżej, co chcesz. Pamiętaj, że musiszPermitLocalCommand
włączyć w swoim/etc/ssh_config
pliku, aby~C
polecenia działały (zobaczman ssh_config
).Możesz ponownie użyć tej samej sesji ssh, jeśli skonfigurowałeś
ControlMaster
wssh_config
. Jeśli to zrobisz:technicznie nigdy nie opuściłeś sesji ssh i nie musisz ponownie uwierzytelniać. Prawdopodobnie bardziej skomplikowane, niż byś chciał, ale nie mogę wymyślić innego łatwego sposobu.
źródło
!args
w komunikacie pomocy.args
nie jest w pierwszym komunikacie pomóc (~?
), ale w drugim (jeden raz wchodzi dossh>
wiersza z~C
, można wpisaćhelp
wssh>
wierszu polecenia)To są bardzo skomplikowane metody.
Możesz zamontować zdalny system plików na komputerze lokalnym za pomocą
sshfs
:Następnie możesz skopiować wklej plik za pomocą nautilus, gnome, konqueror, delfin, bash lub cokolwiek innego.
źródło
sshfs -oIdentityFile=~/.ssh/keyfile.pem [email protected]:/ /mnt/sshfs/
-R
, dla zdalnego na lokalny) lub do przodu (-L
, dla lokalnego na zdalny), aby uruchomić przesyłanie plików, zakładając, że jakiś demon przesyłający pliki nasłuchuje na drugim końcu.Ale żadne z nich nie jest tak naprawdę potrzebne, IMO. Protokół SSH obsługuje wiele kanałów na jednym połączeniu, a klient OpenSSH obsługuje multipleksowanie. Zakładając, że masz
ControlMaster
iControlPath
skonfigurowałeś (ControlPersist
jest również przydatny),źródło
Jeszcze prostsze podejście: otwórz Filezilla (lub ulubioną przeglądarkę ftp), otwórz połączenie ssh z tą samą witryną, znajdź plik i przeciągnij go do lokalnej struktury plików. Jeśli dopiero zaczynasz korzystać z Filezilli, skorzystaj z funkcji „Site Manager”, aby szybko połączyć się ponownie następnym razem.
Tak, wiem, że jest to oczywiste dla większości z was (i nie dokładnie w punkcie), ale niektórzy (jak ja), którzy znaleźli ten wątek w poszukiwaniu rozwiązania wyłącznie terminalowego, mogli przeoczyć oczywiste.
źródło
ssh://SERVER
.To, co uważam za najlepsze i najbardziej wydajne rozwiązanie, to użycie
xclip-copyfile
ixclip-pastefile
.Na serwerze możesz
xclip-copyfile
skopiować jeden lub więcej plików. Te pliki są następnie dostępne na twoim lokalnym serwerze. Tam możesz użyćxclip-pastefile
.Pomija to potrzebę używania
scp
lub posiadania lokalnego serwera ssh. Używam tego na przykład z cygwin. Jedynym problemem jest to, że wymaga to instalacji,xclip
jeśli jeszcze go nie masz. Aha, i to działa również z plikami binarnymi.źródło
Jednym z wielu powodów, dla których korzystamy z SecureCRT - pomimo tego, że preferujemy oprogramowanie open source tam, gdzie jest to praktyczne - jest łatwość przesyłania plików. Po prostu nie ma bezpośredniej wymiany w świecie F / OSS.
SecureCRT zaczął jako czysty program Windows w połowie lat 90., ale kilka lat temu został przeniesiony do Mac OS X i Linux .
SecureCRT ma trzy główne funkcje przesyłania plików do iz systemu, w którym jesteś SSH:
ZModem , YModem , XModem , Kermit i ASCII - SecureCRT to old-schoolowy emulator terminala, obsługujący kilka wewnątrzpasmowych protokołów przesyłania plików.
Najłatwiejszy w użyciu jest ZModem. Gdy wpiszesz coś
sz file-to-download
w zdalnym wierszu poleceń,sz
program zdalny wypisze sekwencję zmiany znaczenia, która każe SecureCRT natychmiast rozpocząć pobieraniefile-to-download
do domyślnego katalogu pobierania.Miłym akcentem jest to, że katalog pobierania można dostosować dla każdej sesji. Używamy tego, aby mieć katalogi dla poszczególnych witryn na naszym głównym serwerze plików biurowych, więc nie musimy ręcznie sortować pobranych plików.
(
sz
to program „send ZModem”, będący częściąlrzsz
pakietu. Jest już spakowany dla większości systemów Unixy. Jeśli z jakiegoś powodu twój zdalny system jeszcze go nie zainstalował i nie możesz łatwo zainstalować pakietu binarnego, pakiet źródłowy jest mały i bardzo przenośny.lrzsz
Niejednokrotnie musiałem wysłać „sharchive” lubuuencode
„tarball” do zdartego systemu zdalnego, aby móc do niego pliki ZModem).SFTP - SecureCRT ma ściśle zintegrowaną podstawową implementację SFTP.
Przez „ściśle zintegrowany” rozumiem, że po podaniu polecenia menu SFTP lub skrótu klawiaturowego otwiera nową kartę połączoną ze zdalną witryną za pośrednictwem tego samego połączenia SSH. Dlatego nie trzeba się ponownie logować, a połączenie jest ustanawiane nieco szybciej niż w przypadku otwarcia osobnego połączenia SFTP z tym samym serwerem.
Cechę SFTP określam jako „podstawową”, ponieważ VanDyke Software ma osobny produkt do przesyłania plików, SecureFX . Jest bardziej funkcjonalny niż wbudowany klient SFTP, a także integruje się z SecureCRT.
Funkcja SFTP SecureCRT umożliwia konfigurowanie domyślnych katalogów zdalnych i lokalnych, które są niezależne od konfiguracji ZModem.
Ta funkcja SFTP ma podstawowy interfejs wiersza poleceń, naśladujący
sftp
program OpenSSH , z tą różnicą, że zapewnia dostęp do Tabpoleceń. Zatem odzyskanie zdalnego pliku o nazwiesomefile.tar.gz
może być tak proste, jakget so
TabEnter.Przeciągnij i upuść - przeciągnięcie i upuszczenie pliku do okna terminala powoduje automatyczne
rz
wpisanie pliku i rozpoczęcie wysyłania pliku.Alternatywnie możesz otworzyć kartę SFTP i upuścić plik na tę kartę, aby wysłać go przez SFTP. Zatem wysłanie pliku na zdalnym systemie może być tak proste, jak Alt-P, przeciągnij , upuść .
Przekonujemy się, że transfery odbywają się o wiele szybciej za pośrednictwem SFTP, prawdopodobnie dlatego, że jest to protokół oparty na TCP, więc korzysta z dużych przesuwanych okien nowoczesnych stosów TCP / IP . ZModem został zaprojektowany w czasach, gdy rozmiar bloku 64 kiB był uważany za „duży”. Tak więc duża część potencjalnej prędkości w łączu jest pochłaniana w ZModem, podczas gdy każdy koniec czeka na potwierdzenia transferu bloku.
Jedną fajną rzeczą w trybie „przeciągnij i upuść” jest to, że eliminuje stres związany z używaniem ZModem. Podczas pisania
rz
w systemie zdalnym SecureCRT automatycznie wyświetla próbnik plików. Następnie masz około minuty na znalezienie i wybranie pliku, zanim upłynie limit czasu strony zdalnej. Stwarza to atmosferę wyścigu z czasem, co nie jest przyjemne. Przeciągnij i upuść pozwala znaleźć plik w wolnym czasie, a następnie rozpocząć transfer jednym szybkim ruchem myszy.Nadal korzystamy z metody ręcznej, rozpoczynając przesyłanie wyraźnym
rz
poleceniem. Wynika to z faktu, że SecureCRT pozwala skonfigurować katalog wysyłania na sesję, który wskazujemy na folder na serwerze plików, który zawsze zawiera najnowszą wersję oprogramowania uruchomionego przez daną zdalną witrynę. W przypadku takich transferów nie ma wyścigu z czasem, ponieważ selektor plików otwiera się w odpowiednim miejscu na początek.źródło
Posługiwać się "!" przekonwertować plik na reprezentację ASCII pliku (np
! uuencode myfile.bin >uuencode.dat
.). Następnie użyj! cat uuencode.dat >target.dat
. Następnie użyj kodu uudecode po stronie docelowej:! uudecode target.dat >myfile.bin
źródło