Pokud jsem přihlášený do systému přes SSH, existuje způsob, jak zkopírovat soubor zpět do mého místního systému, aniž bych spouštěl další terminál nebo relaci obrazovky a dělal scp nebo něco podobného nebo aniž bych prováděl SSH ze vzdáleného systému zpět do místní systém?
Přijatá odpověď:
Hlavní připojení
Nejjednodušší je to plánovat předem.
Otevřete hlavní připojení poprvé. Pro následná připojení nasměrujte podřízená připojení přes stávající hlavní připojení. Ve vašem ~/.ssh/config
, nastavte automatické sdílení připojení:
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
Pokud spustíte relaci ssh na stejném (uživateli, portu, počítači) jako existující připojení, bude druhá relace tunelována přes první. Navázání druhého připojení nevyžaduje žádné nové ověřování a je velmi rychlé.
Takže když máte aktivní připojení, můžete rychle:
- zkopírujte soubor pomocí
scp
neborsync
; - připojit vzdálený souborový systém pomocí sshfs.
Přeposílání
Na existujícím připojení můžete vytvořit reverzní ssh tunel. Na příkazovém řádku ssh vytvořte vzdálené předávání zadá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. Poté ssh -p 22042 localhost
na vzdáleném počítači vás připojí zpět ke zdrojovému počítači; můžete použít scp -P 22042 foo localhost:
kopírovat soubory.
Toto můžete dále automatizovat 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 vzdálené předávání, můžete to udělat na existující relaci ssh. Zadejte Enter ~C
Zadejte -R 22042:localhost:22
Zadejte .
Další informace naleznete v části „Escape characters“ v příručce.
V tomto vláknu Chyba serveru je také několik zajímavých informací.
Kopírovat a vložit
Pokud je soubor malý, můžete jej napsat a zkopírovat a vložit z výstupu terminálu. Pokud soubor obsahuje netisknutelné znaky, použijte kódování, jako je base64.
remote.example.net$ base64 <myfile (copy the output)
local.example.net$ base64 -d >myfile (paste the clipboard contents) Ctrl+D
Pokud máte aktivní X forwarding, pohodlněji zkopírujte soubor na vzdáleném počítači a vložte jej lokálně. Data můžete do a z xclip
přenášet 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 -