it-swarm-eu.dev

Zkopírujte soubor zpět do lokálního systému pomocí ssh

Pokud jsem přihlášený k systému přes SSH, existuje způsob, jak zkopírovat soubor zpět do mého lokálního systému bez spuštění jiného terminálu nebo relace obrazovky a dělat scp nebo něco podobného nebo bez SSH ze vzdáleného systému zpět do místní systém?

271
Shawn J. Goff

Hlavní připojení

Je to nejjednodušší, pokud plánujete předem.

První připojení otevřete. U následujících připojení směrujte připojení slave prostřednictvím existujícího hlavního připojení. Ve vašem ~/.ssh/config , nastavte automatické sdílení připojení:

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

Pokud zahájíte relaci ssh ke stejnému (uživatel, port, stroj) jako existující připojení, bude druhá relace tunelem přes první. Navázání druhého připojení nevyžaduje žádnou novou autentizaci a je velmi rychlé.

Takže když máte aktivní připojení, můžete rychle:

Spedice

Na existujícím připojení můžete vytvořit tunel ssh pro zpětný chod. Na příkazovém řádku ssh vytvořte vzdálené přeposílání předáním -R 22042:localhost:22 kde 22042 je náhodně vybrané číslo, které se liší od jakéhokoli jiného čísla portu na vzdáleném počítači. Pak ssh -p 22042 localhost na vzdáleném počítači vás spojí zpět se zdrojovým strojem; Můžeš použít scp -P 22042 foo localhost: pro kopírování souborů.

Můžete to zautomatizovat pomocí RemoteForward 22042 localhost:22. Problém je v tom, že pokud se připojíte ke stejnému počítači pomocí více instancí ssh, nebo pokud port používá někdo jiný, přesměrování nedostanete.

Pokud jste od začátku nepovolili dálkové přeposílání, můžete to provést na existující relaci ssh. Typ Enter ~C Enter -R 22042:localhost:22 Enter. Další informace viz „Únikové znaky“ v příručce.

Existuje také několik zajímavých informací v toto vlákno serverové chyby .

Kopírovat vložit

Pokud je soubor malý, můžete jej zadat a zkopírovat a vložit z terminálového výstupu. Pokud soubor obsahuje netisknutelné znaky, použijte kódování, jako je base64 .

 remote.example.net $ base64 <myfile 
  (zkopírujte výstup) 
 local.example.net $ base64 -d> myfile 
  (vložte obsah schránky) Ctrl+D

Výhodněji, pokud máte aktivní X předávání, zkopírujte soubor na vzdáleném počítači a vložte jej lokálně. Data můžete vkládat a vypínat z xclip nebo xsel . Pokud chcete zachovat název souboru a metadata, zkopírujte a vložte archiv.

remote.example.net$ tar -czf - myfile | xsel
local.example.net$ xsel | tar -xzf -

Dalším (IMO) snadným způsobem by bylo:

# to remote Host
cat localfile.conf | ssh [email protected] 'cat -> /tmp/remotefile.conf'

# from remote Host
ssh [email protected] 'cat /tmp/remotefile.conf' > /tmp/localfile.conf

Nebo pokud dáváte přednost něčemu podobnému GUI, zkuste Midnight Commander . Říkají funkci Shell-Link. Většina distros má ve svých balíčkových systémech jako mc.

75
Florian Fida

SSH nepodporuje několik příkazů prostřednictvím znaku escape (ve výchozím nastavení ~):

$ ~?
Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

$ ~C
ssh> help
Commands:
      -L[bind_address:]port:Host:hostport    Request local forward
      -R[bind_address:]port:Host:hostport    Request remote forward
      -D[bind_address:]port                  Request dynamic forward
      -KR[bind_address:]port                 Cancel remote forward
      !args                                  Execute local command

Zdá se, že !args Je nejblíže tomu, co chcete. Abyste mohli pracovat s příkazy /etc/ssh_config, Musíte mít v souboru ~C Povoleno PermitLocalCommand (viz man ssh_config).

Stejnou relaci ssh můžete znovu použít, pokud nastavíte ControlMaster v ssh_config. Pokud tak učiníte:

$ ~C
ssh> !scp file [email protected]:

technicky jste nikdy neopustili ssh relaci a nemusíte se znovu autentizovat. Pravděpodobně složitější, než byste chtěli, ale nedokážu vymyslet jiný snadný způsob.

54
Corey Henderson

To vše jsou velmi komplikované metody.
Vzdálený souborový systém můžete připojit na svůj lokální počítač pomocí sshfs:

mkdir -p /mnt/sshfs

[email protected]:~# sshfs 192.168.1.2:/ /mnt/sshfs
[email protected]:~# umount /mnt/sshfs

Pak můžete kopírovat vložit soubor s nautilus, gnome, konqueror, delfín, bash nebo cokoli.

38
Quandary
  • Použijte ssh-xfer , modifikovaný ssh-agent, který efektivně přetíží stávající ssh postranní kanál pro přenos souborů.
  • Použijte zssh , což je efektivně zmodem nad ssh. Pokud jste někdy použili rzsz, bude to vypadat velmi dobře.
  • Reverzní (-R, pro vzdálený přístup k místním) nebo vpřed (-L, pro lokální/vzdálené) porty pro přenos souborů přes, za předpokladu, že máte nějaký démon pro přenos souborů na druhém konci.

Ale nic z toho není potřeba, IMO. Protokol SSH podporuje více kanálů na jednom připojení a klient OpenSSH podporuje multiplexování. Za předpokladu, že máte ControlMaster a ControlPathset up (ControlPersist je také užitečné),

# první připojení
 $ ssh remote 
 
 # bude multiplexovat při stejném připojení, které otevře původní ssh
 $ sftp remote 
15
ephemient

Ještě jednodušší přístup: Otevřete Filezilla (nebo váš oblíbený ftp prohlížeč), otevřete ssh připojení ke stejnému webu, najděte soubor a přetáhněte jej do místní struktury souboru. Pokud jste ve společnosti Filezilla nováčkem, můžete se příště rychle připojit pomocí funkce „správce webu“.

Ano, vím, že je to zřejmé pro většinu z vás (a ne přesně na místě), ale někteří (jako já), kteří našli toto vlákno hledající řešení pouze pro terminály, mohli zjevně přehlédnout.

9
Larry Jones

To, co jsem shledal jako nejlepší a nejúčinnější řešení, je použití xclip-copyfile a xclip-pastefile.

Na serveru používáte xclip-copyfile pro zkopírování jednoho nebo více souborů. Tyto soubory jsou pak k dispozici na místním serveru. Tam můžete použít xclip-pastefile.

Tím se obchází potřeba použít scp nebo mít lokální ssh server. Používám to například s cygwinem. Jediným problémem je, že to vyžaduje instalaci xclip, pokud ji ještě nemáte. Jo, a to funguje také s binárními soubory.

8
Robert

Jedním z mnoha důvodů, proč používáme SecureCRT - navzdory upřednostňování softwaru s otevřeným zdrojovým kódem tam, kde je to praktické, je snadnost přenosu souborů. Ve světě F/OSS prostě neexistuje žádná přímá náhrada.

SecureCRT začínal jako čistě Windows program v polovině 90. let, ale byl portován do Mac OS X a Linux před několika lety .

SecureCRT má tři hlavní funkce pro přenos souborů do a ze systému, do kterého jste SSH měli:

  • ZModem , YModem , XModem , Kermit a ASCII - SecureCRT je emulátor terminálu staré školy, který podporuje několik protokolů přenosu souborů v pásmu.

    Nejjednodušší použití je ZModem. Když napíšete něco jako sz file-to-download na vzdáleném příkazovém řádku vzdálený program sz vypíše escape sekvence , která říká SecureCRT, aby okamžitě začal stahovat file-to-download do výchozího adresáře ke stažení.

    Pěkné je, že adresář ke stažení je přizpůsobitelný pro každou relaci. Používáme to, abychom měli adresáře na webu na našem hlavním kancelářském souborovém serveru, takže nemusíme stažené soubory ručně třídit ručně.

    (sz je program "send ZModem", součást balíčku lrzsz . Je již zabalen pro většinu unixových systémů. Pokud z nějakého důvodu váš vzdálený systém nefunguje Nemám již nainstalovaný a nemůžete snadno nainstalovat binární balíček, zdrojový balíček je malý a vysoce přenosný. Více než jednou jsem musel poslat lrzsz"sharchive" " nebo uuencode 'd tarball do odizolovaného vzdáleného systému, abych do něj mohl ukládat soubory ZModem.)

  • [~ # ~] sftp [~ # ~] - SecureCRT má pevně integrovanou základní implementaci SFTP.

    „Pevně ​​integrovanou“ mám na mysli, že když zadáte příkaz nabídky SFTP nebo klávesovou zkratku, otevře se nová karta připojená ke vzdálenému serveru prostřednictvím stejného připojení SSH. Proto se nemusíte přihlásit zpět a připojení je navázáno o něco rychleji, než kdybyste otevřeli samostatné SFTP připojení ke stejnému serveru.

    Charakterizuji funkci SFTP jako „základní“, protože software VanDyke má samostatný produkt pro přenos souborů, SecureFX . Je funkčnější než integrovaný SFTP klient a také se integruje s SecureCRT.

    Funkce SFTP SecureCRT umožňuje konfigurovat výchozí vzdálené a místní adresáře, které jsou oddělené od konfigurace ZModem.

    Tato funkce SFTP má základní rozhraní příkazového řádku, napodobující program sftp OpenSSH, kromě toho, že má výhody jako Tab dokončení příkazu. Získání vzdáleného souboru s názvem somefile.tar.gz může být stejně snadné jako get soTabEnter.

  • Drag-and-drop - Pokud přetáhnete soubor do okna terminálu, automaticky pro vás zadá rz a zahájí odesílání souboru.

    Alternativně můžete otevřít kartu SFTP a přetáhnout soubor na tuto kartu a odeslat ji prostřednictvím SFTP. Odesílání souboru do vzdáleného systému by tedy mohlo být stejně jednoduché jako Alt-P, drag, drop.

    Zjistili jsme, že přenosy probíhají mnohem rychleji přes SFTP, pravděpodobně proto, že se jedná o protokol založený na TCP, takže těží z velkých posuvných oken moderních TCP/IP komíny . ZModem byl navržen ve dnech, kdy byla velikost bloku 64 kiB považována za „velkou“. Proto je v ZModemu nasáknuto velké množství potenciální rychlosti ve spoji, zatímco každý konec čeká na potvrzení blokového přenosu.

    Jedna pěkná věc o režimu drag-and-drop je to, že z používání ZModemu odstraňuje jeden ze stresů. Když do vzdáleného systému zadáte rz, SecureCRT automaticky otevře výběr souborů. Poté budete mít asi minutu na nalezení a výběr souboru, než vyprší časový limit vzdálené strany. Tím se vytvoří rasa proti hodinám, která není příjemná. Drag-and-drop vám umožní najít soubor ve vašem volném čase, pak začít přenos s jedním rychlým pohybem myši.

    Stále používáme manuální metodu, přičemž přenos začíná explicitním příkazem rz. Důvodem je, že SecureCRT umožňuje konfigurovat adresář pro odesílání za relaci, který ukazujeme na složku na souborovém serveru, která vždy obsahuje nejnovější sestavení softwaru, který běží konkrétní vzdálený web. U takových převodů nedochází k závodům s hodinami, protože se souborový otvírač otevírá na správném místě, kde začít.

3
Warren Young

Použijte "!" převést soubor na ASCII reprezentaci vašeho souboru (např. ! uuencode myfile.bin >uuencode.dat). Poté použijte ! cat uuencode.dat >target.dat. Poté použijte uudecode na cílové straně: ! uudecode target.dat >myfile.bin

1
Nils