Stáhněte soubor přes aktivní relaci SSH

83

Jsem tedy SSHed na můj server Ubuntu z mé pracovní plochy Ubuntu. Jsem na určité cestě a chci si stáhnout soubor do svého lokálního souborového systému (nejlépe cesta, na které jsem byla předtím, než jsem vstoupil do relace SSH).

Mohl bych připojit SSH a vytáhnout soubor přes myši, ale co když jsem se snažil získat kořenový soubor a přihlašování přímo kořenem je zakázán? I když tomu tak nebylo (není to nyní), jistě musí existovat jednoduchý způsob, jak stáhnout soubor zpět přes aktivní připojení SSH.

Jistě!

    
dané Oli 15.11.2010 15:59

11 odpovědí

32

Můžete se podívat na zssh , který je k dispozici ve vesmíru, a proto je k dispozici s

sudo apt-get install zssh

Potřebujete to na serveru ubuntu a na vašem klientovi, ale v podstatě při přihlášení se zssh, stačí stisknout 'ctrl- @' a vyvolá "režim přenosu souborů", který vám umožní odeslat soubory zpět dolů potrubí do klientského počítače nebo je nahrajte z klienta na server.

Nemusíte však re-auth nebo otevřít nové okno pro scp.

Pokud používáte ssh klíče a ssh agent, můžete snadno udělat:

[enter]~[ctrl]-Z

Který bude pozadí ssh, a pak jenscp $!:/whatever/whatever .'

Jakmile je soubor přenesen,fg získá ssh zpět.

Pokud nepoužíváte ssh klíče, můžete stále používat volby "ControlMaster" a "ControlPath", které byly přidány do posledních verzí OpenSSh, ale to se stává složitým, zkontrolujte man ssh_config

    
odpověděl SpamapS 17.11.2010 01:46
24

Za předpokladu, že na svém počítači běžíte server ssh (existují způsoby, které by mohly vést, ale myslím, že všichni složitější a případně mají problémy s bezpečností), můžete nastavit zpětný tunel ssh. Viz SSH snadno zkopírujte soubor do místního systému . unix.SE .

  • Zadejte Enter ~C Enter -R 22042:localhost:22 Enter libovolné číslo portu mezi 1024 a 65534, které se nepoužívá).
  • Potomscp -P 22042 foo localhost: zkopíruje souborfoo do aktuálního adresáře na serveru do vašeho domova na ploše.
  • Nyní přesuňte soubor do aktuálního adresáře na ploše zadáním Enter ~ Ctrl + Z mv ~/foo . Zadejte fg Enter .

Pořadí escape Ssh začíná s~; tilde je rozpoznán pouze po nové linii. ~ Ctrl+Z vkládá ssh do pozadí. ~C zadá příkazový řádek, kde můžete vytvořit nebo odebrat přesměrování.

    
odpověděl Gilles 15.11.2010 23:37
10

Přišel jsem se způsobem, jak to udělat se standardním ssh. Je to skript, který duplikuje současné spojení ssh, najde pracovní adresář ve vzdáleném počítači a zkopíruje zadaný soubor na místní počítač. Potřebuje 2 velmi malé skripty (1 vzdálený, 1 lokální) a 2 řádky ve vašem ssh configu. Kroky jsou následující:

  1. Přidejte tyto 2 řádky do složky~/.ssh/config:

    ControlMaster auto
    ControlPath ~/.ssh/socket-%r@%h:%p
    

    Nyní, pokud máte ssh připojení k machineX otevřené, nebudete potřebovat hesla pro otevření dalšího.

  2. Vytvořte 1-řádkový skript ve vzdáleném počítači s názvem~/.grabCat.sh

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/
    
  3. Vytvořte skript na místním počítači nazvaný ~ / .grab.sh

    \#!/bin/bash
    [ -n "" ] && dir="" || dir="."
    ssh "" ".grabCat.sh " > "$dir/"
    
  4. a vytvořte alias pro grab.sh v (~/.bashrc nebo kdekoli):

    alias grab=~/.grab.sh
    

To je všechno hotovo. Nyní, pokud jste přihlášeni domachineX:/some/directory, spusťte nový terminál a zadejte

grab machineX filename

Tím se soubor umístí do aktuálního pracovního adresáře na místním počítači. Můžete zadat jiné umístění jako třetí argument pro "chytit".

Poznámka: Obě skripty musí být "spustitelné", tj.chmod u+x filename.

    
odpověděl user6702 30.11.2010 11:29
5

Pokud je váš klientský stroj (stroj, na kterém sedíte) nazývá machineA a stroj, se kterým jste v současné době používány SSH, se nazývá stroj B. MachineA, váš místní počítač musí mít spuštěný SSHD a port 22 otevřený. Pak:

scp myfile machineA:

Kopírujemyfile na MachineB do domovského adresáře MachineA na machineA. To předpokládá, že uživatelské jméno / heslo jsou stejné.

scp myfile machineA:/newdir/newname

Kopírujemyfile one MachineB do/newdir/newname na machineA. To předpokládá, že uživatelské jméno / heslo jsou stejné.

scp MachineA:/path/to/my/otherfile . 

Získá kopiiotherfile z mého adresáře MachineA na MachineA a umístí ho do aktuálního pracovního adresáře na stroji MachineB (označeném standardním UNIXm znakem "dot" (.)). To předpokládá, že uživatelské jméno / heslo jsou stejné.

Pokud uživatelské jméno / heslo nejsou stejné, použijte:

scp myfile user@MachineA: získat soubor.

scp user@MachineA:/path/to/my/otherfile . k umístění souborů

POZNÁMKY o SCP:

Stejně jako příkazcp,scp má volbu -p pro šíření nastavení oprávnění původního souboru do kopie (jinak se kopie provádí s normálními nastaveními pro nové soubory) a -r možnost zkopírovat celý adresářový strom s jedním příkazem.

scp vytváří zcela transparentní šifrovaný datový kanál mezi těmito dvěma počítači, takže binární data (například obrázky nebo spustitelné programy) jsou správně zachovány. To také znamená, žescp není schopen provést automatickou koncovou konverzi ukončení linky mezi různými typy operačních systémů, což lze provést pomocí ftp v režimu "ascii". To nebude problém při kopírování mezi Unixovými systémy, které všechny používají stejnou konvenci koncového řádku.

    
odpověděl LukeInDC 07.12.2012 20:39
2

Pokud přistupujete k serveru pomocí ssh, získáte možnost připojení přes sftp. Udržujte souborový klient (GUI) v ruce a vložte cestu, kterou právě používáte.

    
odpověděl jet 16.11.2010 02:12
1

Nejde o aktivní spojení SSH, ale scp zkopíruje soubory pomocí stejných mechanismů a oprávnění jako ssh.

    
odpověděl msw 15.11.2010 17:11
1

To není možné s výchozí relací ssh, ale místo skriptu ssh můžete použít skript, který začíná podobně jako jednoduchý ftp nebo rsh server na vašem lokálním systému a spouští ssh s potřebnými možnostmi nastavení tunelu zpět na ploše pro připojení k tomuto serveru.

    
odpověděl JanC 15.11.2010 18:45
1

konsole má tuto možnost prostřednictvím nabídky "Edit-> ZModem Nahrávání", když jste ve vzdálené relaci (nebo Ctrl-Alt-U).

Poznámka: balíčeklrzsz musí být nainstalován jako první. Pro mě vypadá jako práce pouze pro nahrávání souborů ASCII.

    
odpověděl jet 13.09.2015 22:58
1

Je-li váš soubor dostatečně malý, můžete jej kódovat pomocí base64 a dekódovat jej lokálně:

remote.example.net$ base64 <myfile
(copy the output)
local.example.net$ base64 -d >myfile
(copy the output)
Ctrl+D

Původní odpověď, kde jsem dostal (a testoval) z těchto stránek: Odkaz

    
odpověděl wesalius 20.01.2017 20:17
0

Jelikož se připojujete z pracovní plochy, myslím, že můžete otevřít druhý terminál.

Takhle to často dělám:

  • z prvního terminálu, kde je spuštěna relace ssh, dostanu úplnou cestu k souboru, který potřebuji získat, a to buď pomocírealpath myfile neboreadlink -f myfile (starší verze Ubuntu nepředinstalarealpath ) a zkopírujte jej.
  • z druhého terminálu používámscp nebosftp, abych získal soubor a vložil celou cestu, kterou jsem dostal předtím. Například:scp user@host:/etc/some/file ./

Je to naprosto základní, ale je také snadné si pamatovat a nepotřebuje žádný další balíček k práci.

    
odpověděl gerlos 20.01.2018 10:59
0

Překvapivě nevidím žádnou zmínku o dobrém starém Midnight Commanderovi zde. Podle mého názoru je to pravděpodobně nejvíce univerzální & užitečný správce souborů pro shell s možností napájení, jeden z nástrojů "musí mít" pro případ, který také umožňuje připojení přes SSH, FTP, SFTP stejně, zatímco na druhém panelu můžete otevřít jakýkoli jiný lokální) souborový systém a tak pracovat se soubory volně.

Vše, co potřebujete, je: apt-get install mc (z vesmíru)

Poté spusťte mc, otevřete nabídku pro levý nebo pravý panel, zvolte připojení shell, zadejte uživatelské jméno @ remote-ip, heslo - vlastně to je .. kopírovat (zde: stáhnout) soubory / složky z jednoho počítače do dalšího s F5, přesuňte se pomocí F6 apod. podle níže uvedených tlačítek. Pro staré uživatele MS: stejně jako v NC pro DOS

    
odpověděl Nex0 04.07.2018 15:10