Chcę pobrać plik z aktywnej sesji SSH. W wielu przypadkach pewnie mógłby po prostu użyć SFTP, scp
, rsync
et al, ale są chwile, gdzie mam podwyższone uprawnienia na zdalnym serwerze w taki sposób, że nie mogą korzystać z tych metod.
Jeśli próbujesz zrozumieć, co mam na myśli, wyobraź sobie, że chcesz pobrać coś z /root/
lub /var/log/auth.log
. Logowanie root jest wyłączone (ponieważ nie jesteśmy idiotami). Jak zdobyć ten plik? Skopiować go w mniej chronione miejsce, a następnie przenieść? To jest niezgrabne. Istnieją również scenariusze, w których zdalna ścieżka jest złożona lub tymczasowa lub nawet nie jest ścieżką, ponieważ chcę, aby dane wyjściowe polecenia zdalnego były przechowywane lokalnie. Przechowywać zdalnie, a następnie skopiować? Clunk!
Istnieje kilka innych niezgrabnych sposobów na uzyskanie tych wersji, ale w idealnym świecie miałbym coś podobnego do lokalnego dostępu do zapisu ze zdalnego serwera, wykorzystując istniejącą sesję SSH jako kanał. Coś w stylu (to tylko wrażenie artysty):
$oli@remote: cp /root/cheesecake /local/
I po prostu pojawia się w mojej lokalnej cwd
. A dwukierunkowy dostęp nie byłby złą rzeczą.
Minęło osiem długich lat, odkąd zadałem to pytanie, i widzieliśmy prawdziwy zakres brzękania, ale pozostaje to problem, z którym wciąż mam problemy.
Przekształciłem pytanie w coś o wiele bardziej idealistycznego. W pełni rozumiem, że obecnie może nie być idealnej odpowiedzi. Doceniamy wszystkie przeszłe i przyszłe wysiłki na rzecz mojego ideału.
zssh
jest prawdopodobnie najbliższy przepływowi pracy przypominającemu zmodem, który pamiętasz.Odpowiedzi:
Możesz wypróbować zssh , który jest dostępny we wszechświecie, a zatem dostępny z
sudo apt-get install zssh
Potrzebujesz go na swoim serwerze Ubuntu i na kliencie, ale w zasadzie po zalogowaniu się z zssh, po prostu naciskasz „ctrl- @” i uruchamia się „Tryb przesyłania plików”, który pozwala ci przesyłać pliki z powrotem do twojego potoku komputer kliencki lub prześlij je z klienta na serwer.
Nie musisz jednak ponownie uwierzytelniać ani otwierać nowego okna do scp.
Jeśli używasz kluczy ssh i agenta ssh, możesz dość łatwo zrobić:
Które będzie w tle ssh, a następnie po prostu
scp $!:/whatever/whatever .'
Po przesłaniu pliku,
fg
aby odzyskać ssh.Jeśli nie używasz kluczy ssh, nadal możesz używać opcji „ControlMaster” i „ControlPath” dodanych do najnowszych wersji OpenSSh, ale to staje się trudne, sprawdź man ssh_config
źródło
Zakładając, że korzystasz z serwera ssh na swoim pulpicie (istnieją na to sposoby, ale myślę, że wszystkie one zwiększają złożoność i mogą mieć problemy z bezpieczeństwem), możesz skonfigurować tunel ssh do tyłu. Zobacz SSH, jak łatwo skopiować plik do systemu lokalnego. na co unix.SE .
~C
Enter-R 22042:localhost:22
Enteraby utworzyć zwrotne przekierowanie portów z serwera na pulpit (22042 może być dowolnym numerem portu z zakresu od 1024 do 65534, który nie jest używany).scp -P 22042 foo localhost:
skopiuje plikfoo
z bieżącego katalogu na serwerze do twojego domu na pulpicie.~
Ctrl+ Zmv ~/foo .
Enterfg
Enter.Sekwencje specjalne Ssh zaczynają się od
~
; tylda rozpoznawana jest dopiero po nowej linii.~ Ctrl+Z
umieszcza ssh w tle.~C
wchodzi do wiersza poleceń, w którym można utworzyć lub usunąć przekazanie.źródło
Wymyśliłem sposób na zrobienie tego ze standardowym ssh. Jest to skrypt, który powiela bieżące połączenie ssh, znajduje katalog roboczy na komputerze zdalnym i kopiuje określony plik na komputer lokalny. Potrzebuje 2 bardzo małych skryptów (1 zdalny, 1 lokalny) i 2 linii w konfiguracji ssh. Kroki są następujące:
Dodaj te 2 linie do
~/.ssh/config
:Teraz, jeśli masz połączenie ssh z maszyną X otwarte, nie będziesz potrzebować haseł, aby otworzyć kolejne.
Utwórz 1-liniowy skrypt na zdalnym komputerze o nazwie
~/.grabCat.sh
Utwórz skrypt na lokalnej maszynie o nazwie ~ / .grab.sh
i utwórz alias dla grab.sh w (
~/.bashrc
lub gdziekolwiek):To wszystko, gotowe. Teraz, jeśli jesteś zalogowany
machineX:/some/directory
, po prostu uruchom nowy terminal i wpiszTo umieszcza plik w bieżącym katalogu roboczym na komputerze lokalnym. Możesz podać inną lokalizację jako trzeci argument „grab”.
Uwaga: Oczywiście oba skrypty muszą być „wykonywalne”, tzn
chmod u+x filename
.źródło
Jeśli twoja maszyna kliencka (maszyna, na której siedzisz) nazywa się maszyną A, a maszyna, na której aktualnie jesteś SSH, nazywa się maszyną B. MaszynaA, na twoim komputerze lokalnym musi być uruchomiony dysk SSHD i otwarty port 22. Następnie:
Kopiuje
myfile
na MachineB do mojego katalogu domowego MachineA na komputerze A. Zakłada się, że identyfikator użytkownika / hasło są takie same.Kopiuje
myfile
jeden komputer B/newdir/newname
na komputer A. Zakłada się, że identyfikator użytkownika / hasło są takie same.Pobiera kopię
otherfile
z mojego katalogu MachineA na MachineA i umieszcza ją w moim bieżącym katalogu roboczym na maszynie MachineB (oznaczonym w standardowy sposób UNIX przez znak „kropka” (.)). Zakłada się, że identyfikator użytkownika / hasło są takie same.Jeśli identyfikator użytkownika / hasło nie są takie same, użyj:
scp myfile user@MachineA:
uzyskać plik.scp user@MachineA:/path/to/my/otherfile .
umieszczać plikiUWAGI na temat SCP:
Podobnie jak
cp
polecenie,scp
ma opcję -p do propagowania ustawień uprawnień oryginalnego pliku do kopii (w przeciwnym razie kopia jest wykonywana z normalnymi ustawieniami dla nowych plików) oraz opcję -r do skopiowania całego drzewa katalogów za pomocą jednego Komenda.scp
tworzy całkowicie przezroczysty zaszyfrowany kanał danych między dwoma komputerami, dzięki czemu dane binarne (takie jak obrazy lub programy wykonywalne) są poprawnie przechowywane. Oznacza to również, żescp
nie jest w stanie wykonać automatycznej konwersji zakończenia linii między różnymi typami systemów operacyjnych, co można zrobić za pomocą ftp w trybie „ascii”. Nie będzie to stanowić problemu podczas kopiowania między systemami uniksowymi, które wszystkie używają tej samej konwencji końca linii.źródło
jeśli uzyskujesz dostęp do serwera przez ssh, możesz także łączyć się przez sftp. Miej pod ręką klienta Filezilla (GUI) i wklej ścieżkę, na której aktualnie jesteś
źródło
Jeśli twój plik jest wystarczająco mały, możesz go zakodować za pomocą base64, a następnie odkodować lokalnie:
Oryginalna odpowiedź, skąd ją otrzymałem (i przetestowałem): https://unix.stackexchange.com/a/2869/194134
źródło
To nie jest aktywne połączenie SSH, ale scp kopiuje pliki przy użyciu tych samych mechanizmów i uprawnień, co ssh.
źródło
get file
i pojawia się magicznie na mojej lokalnej maszynie. Jeśli ma to zrobić za pośrednictwem usługi tunelowanej przez SSH, niech tak będzie. Ale powinno to być związane z sesją.sshd
uruchomione i dlatego powinieneś móc skorzystaćscp
z wiersza poleceń serwera, aby wyrzucić pliki z powrotem do klienta. Dookoła jest tylko tyle magii; czasami nadal musimy naciskać przyciski. Przydatne jest również rozwiązanie FileZilla.Nie jest to możliwe w przypadku domyślnej sesji ssh, ale można użyć skryptu zamiast ssh, który uruchamia coś takiego jak prosty serwer ftp lub rsh w systemie lokalnym i uruchamia ssh z niezbędnymi opcjami, aby skonfigurować tunel z powrotem na pulpit do łączenia się z tym serwerem.
źródło
konsole
ma tę możliwość poprzez menu „Edycja-> Prześlij ZModem”, gdy jesteś w sesji zdalnej (lub Ctrl-Alt-U).Uwaga:
lrzsz
najpierw należy zainstalować pakiet . Dla mnie wygląda jak działa tylko do przesyłania plików ASCII.źródło
Ponieważ łączysz się z pulpitu, myślę, że możesz otworzyć drugi terminal.
Tak często robię:
realpath myfile
alboreadlink -f myfile
(starsze wersje Ubuntu nie preinstalacjirealpath
) i skopiuj go.scp
lub,sftp
aby pobrać plik, wklejając pełną ścieżkę, którą dostałem wcześniej. Na przykład:scp user@host:/etc/some/file ./
Jest to dość podstawowe, ale także łatwe do zapamiętania i nie wymaga dodatkowego pakietu do pracy.
źródło
Zaskakujące, że nie widzę tu wzmianki o dobrym starym dowódcy o północy . Moim zdaniem jest to prawdopodobnie najbardziej uniwersalny i użyteczny menedżer plików dla powłoki z możliwościami zasilania, jedno z „niezbędnych narzędzi” do tej sprawy, które pozwala również na połączenie przez SSH, FTP, SFTP, podczas gdy na na drugim panelu możesz otworzyć dowolny (lokalny) system plików i dzięki temu swobodnie pracować z plikami.
Wszystko czego potrzebujesz to: apt-get install mc (z uniwersum)
Następnie uruchom mc, otwórz menu dla lewego lub prawego panelu, wybierz połączenie powłoki, wprowadź nazwę użytkownika @ remote-ip, hasło - właściwie to jest to ... skopiuj (tutaj: pobierz) pliki / foldery z jednego komputera na drugi za pomocą F5, poruszaj się za pomocą F6 i tak dalej, zgodnie z poniższymi przyciskami. Dla starych użytkowników MS: tak jak w NC dla DOS
źródło
SPOSÓB przemyślenia tego, ludzie. Szukałem też wszystkich głębokich, ciemnych, złożonych odpowiedzi. Okazuje się, że możesz to zrobić bezpośrednio z Dolphin prosto z puszki. fish: // nazwa użytkownika @ serwer: port
źródło