Scarica un file su una sessione SSH attiva

83

Quindi sono SSHed nel mio server Ubuntu dal desktop di Ubuntu. Sono su un determinato percorso e voglio scaricare un file sul mio filesystem locale (preferibilmente il percorso in cui ero prima di entrare nella sessione SSH).

Potrei montare SSH e tirare il file attraverso il mouse, ma cosa succede se sto cercando di ottenere un file root e il login da root direttamente non è consentito? Anche se non fosse così (non lo è ora), sicuramente ci deve essere un modo semplice per ritrarre un file tramite una connessione SSH attiva.

Sicuramente!

    
posta Oli 15.11.2010 - 15:59
fonte

11 risposte

32

Potresti voler controllare zssh , che è disponibile nell'universo e quindi disponibile con

sudo apt-get install zssh

Ne hai bisogno sul tuo server ubuntu e sul tuo client, ma fondamentalmente quando accedi con zssh, premi semplicemente "ctrl- @" e viene visualizzata la "Modalità di trasferimento file" che ti consente di inviare i file indietro pipe al computer client o caricali da client a server.

Tuttavia, non devi re-autorizzare o aprire una nuova finestra per scp.

Se usi le chiavi ssh e un agente ssh, puoi tranquillamente fare:

[enter]~[ctrl]-Z

Quale sarà lo sfondo ssh, e quindi solo scp $!:/whatever/whatever .'

Una volta che il file è stato trasferito, fg per riavere ssh.

Se non usi le chiavi ssh, puoi comunque utilizzare le opzioni "ControlMaster" e "ControlPath" aggiunte alle versioni recenti di OpenSSh, ma ciò diventa complicato, controlla man ssh_config

    
risposta data SpamapS 17.11.2010 - 01:46
fonte
24

Supponendo che tu stia eseguendo un server ssh sul tuo desktop (ci sono modi per aggirare questo, ma penso che tutti aggiungano complessità e possibilmente abbiano problemi di sicurezza), puoi impostare un tunnel ssh inverso. Vedi SSH copia facilmente il file sul sistema locale su unix.SE .

  • Tipo Invio ~C Invio -R 22042:localhost:22 Invio per creare un reverse port forwarding dal tuo server al desktop (22042 può essere qualsiasi numero di porta compreso tra 1024 e 65534 che non è in uso).
  • Quindi scp -P 22042 foo localhost: copierà il file foo nella tua directory corrente sul server a casa tua sul desktop.
  • Ora sposta il file nella directory corrente sul desktop digitando Invio ~ Ctrl + Z mv ~/foo . Inserisci fg Invio .

Le sequenze di escape Ssh iniziano con ~ ; la tilde viene riconosciuta solo dopo una nuova riga. ~ Ctrl+Z mette ssh in background. ~C entra in una riga di comando in cui puoi creare o rimuovere un inoltro.

    
risposta data Gilles 15.11.2010 - 23:37
fonte
10

Ho trovato un modo per farlo con ssh standard. È uno script che duplica la connessione ssh corrente, trova la directory di lavoro sul computer remoto e copia il file specificato nel computer locale. Ha bisogno di 2 script molto piccoli (1 remoto, 1 locale) e 2 linee nella tua ssh config. I passaggi sono i seguenti:

  1. Aggiungi queste 2 linee al tuo ~/.ssh/config :

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

    Ora se hai una connessione ssh con machineX aperto, non ne avrai bisogno password per aprirne un'altra.

  2. Crea uno script a riga singola sul computer remoto chiamato ~/.grabCat.sh

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/
    
  3. Crea uno script sul computer locale chiamato ~ / .grab.sh

    \#!/bin/bash
    [ -n "" ] && dir="" || dir="."
    ssh "" ".grabCat.sh " > "$dir/"
    
  4. e crea un alias per grab.sh in ( ~/.bashrc o dovunque):

    alias grab=~/.grab.sh
    

Questo è tutto, tutto fatto. Ora se hai eseguito l'accesso a machineX:/some/directory , apri un nuovo terminale e digita

grab machineX filename

Questo inserisce il file nella directory di lavoro corrente sul computer locale. Puoi specificare una posizione diversa come terzo argomento per "afferrare".

Nota: ovviamente entrambi gli script devono essere "eseguibili", ovvero chmod u+x filename .

    
risposta data user6702 30.11.2010 - 11:29
fonte
5

Se la macchina client (la macchina su cui ci si trova) si chiama machineA e la macchina su cui si sta attualmente SSH si chiama machine B. MachineA, la macchina locale deve avere SSHD in esecuzione e la porta 22 aperta. Poi:

scp myfile machineA:

Copia myfile su MachineB sulla mia home directory MachineA su machineA. Questo presuppone che userid / password siano uguali.

scp myfile machineA:/newdir/newname

Copie myfile una MachineB a /newdir/newname su machineA. Questo presuppone che userid / password siano uguali.

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

Ottiene una copia di otherfile dalla mia directory MachineA su MachineA e la inserisce nella mia attuale directory di lavoro sulla macchina MachineB (designata in modo UNIX standard dal carattere "punto" (.)). Questo presuppone che userid / password siano uguali.

Se id utente / password non sono uguali, utilizzare:

scp myfile user@MachineA: per ottenere il file.

scp user@MachineA:/path/to/my/otherfile . per mettere i file

NOTE su SCP:

Proprio come il comando cp , scp ha un'opzione -p per propagare le impostazioni di autorizzazione del file originale alla copia (altrimenti la copia è fatta con le normali impostazioni per i nuovi file), e un -r opzione per copiare un intero albero di directory con un comando.

scp crea un canale di dati crittografato completamente trasparente tra le due macchine, quindi i dati binari (come immagini o programmi eseguibili) vengono conservati correttamente. Ciò significa anche che scp non è in grado di eseguire la conversione automatica della fine di fine linea tra diversi tipi di sistemi operativi, come si può fare con ftp in modalità "ascii". Ciò non costituirà un problema durante la copia tra sistemi Unix, che utilizzano tutti la stessa convenzione di fine linea.

    
risposta data LukeInDC 07.12.2012 - 20:39
fonte
2

se si accede al server tramite ssh, si ottiene anche la possibilità di connettersi tramite sftp. Tieni a portata di mano il client filezilla (GUI) e incolla il percorso in cui ti trovi attualmente

    
risposta data jet 16.11.2010 - 02:12
fonte
1

Non è sopra la connessione SSH attiva, ma scp copia i file usando gli stessi meccanismi e permessi di ssh.

    
risposta data msw 15.11.2010 - 17:11
fonte
1

Questo non è possibile con una sessione ssh predefinita, ma potresti usare uno script invece di ssh, che inizia qualcosa come un semplice server ftp o rsh sul tuo sistema locale ed esegue ssh con le opzioni necessarie per impostare un tunnel indietro sul desktop per la connessione a questo server.

    
risposta data JanC 15.11.2010 - 18:45
fonte
1

konsole ha quell'abilità tramite il menu "Modifica & Carica ZModem" mentre ti trovi in ​​una sessione remota (o Ctrl-Alt-U).

Nota: il pacchetto lrzsz deve essere installato per primo. Per me sembra che funzioni solo per il caricamento di file ASCII.

    
risposta data jet 13.09.2015 - 22:58
fonte
1

Se il tuo file è abbastanza piccolo, puoi codificarlo con base64 e decodificarlo localmente:

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

Risposta originale dove ho ottenuto questo (e testato) da: link

    
risposta data wesalius 20.01.2017 - 20:17
fonte
0

Dato che ti stai connettendo da un desktop, immagino che puoi aprire un secondo terminale.

Ecco come faccio spesso:

  • dal primo terminale, quello in cui è in esecuzione la sessione ssh, ottengo il percorso completo del file che devo ottenere, utilizzando realpath myfile o readlink -f myfile (le versioni precedenti di Ubuntu non preinstallano realpath ) e copiarlo.
  • dal secondo terminale uso scp o sftp per ottenere il file, incollando il percorso completo che ho ottenuto prima. Ad esempio: scp user@host:/etc/some/file ./

È piuttosto semplice, ma è anche facile da ricordare e non ha bisogno di alcun pacchetto aggiuntivo per funzionare.

    
risposta data gerlos 20.01.2018 - 10:59
fonte
0

Sorprendentemente non vedo alcuna menzione del buon vecchio Midnight Commander qui. A mio parere, è probabilmente il più universale e amp; utile gestore di file per shell con funzionalità di potenza, uno degli strumenti "must have" per il caso, che consente anche di connettersi tramite SSH, FTP, SFTP, mentre sul secondo pannello è possibile aprire qualsiasi altro (il proprio locale) e quindi lavora liberamente con i file.

Tutto ciò che serve è: apt-get install mc (dall'universo)

Dopo, esegui mc, apri il menu per il pannello sinistro o destro, scegli connessione shell, inserisci username @ remote-ip, la password - in realtà, è proprio così .. copia (qui: scarica) file / cartelle da una macchina a un altro con F5, spostati con F6 e così via in base ai pulsanti sottostanti. Per i vecchi utenti MS: proprio come in NC per DOS

    
risposta data Nex0 04.07.2018 - 15:10
fonte

Leggi altre domande sui tag