Script di shell dal computer locale per eseguire il comando nel computer remoto, quindi continuare sul computer locale


10

Il problema è questo: voglio copiare file da una macchina remota.

Sto cercando un modo per scrivere uno script di shell che si collegherebbe al computer remoto, ottenere la posizione del file memorizzato, una volta che ho ottenuto la disconnessione della posizione dal server remoto e uso scp dall'interno della macchina locale con la posizione ottenuta per copia il file.

In particolare, voglio sapere come da uno script, mi collegherei a una macchina remota, fare compiti su quella macchina. Disconnetti e continua l'esecuzione localmente.

Risposte:


15

Soluzione 1:

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path

Funziona collegandosi al computer remoto, eseguendo alcuni comandi e copiando l'output in una variabile sul computer locale. Dire, facendo eco al percorso del file in remoto, acquisendolo localmente.

Soluzione 2:

ssh user@host "determine_path; cat filename" >local_filename

Funziona trovando ed emettendo il file direttamente da remoto e reindirizzandolo a un file localmente. Questo salta SCP. Ciò richiede che i passaggi precedenti a "cat" non abbiano output (che puoi risolvere con &> / dev / null).


1
+1 per mostrare come risolvere l'intero problema con una connessione, anziché ssh + scp separati.
Peter Cordes,

Tutte le risposte sono utili, ma questa risolve il mio problema più specificamente
gnsr

20

Puoi scrivere uno script nel seguente formato:

command1
command2
...
ssh user@machine command3
...
command4
command5

È necessario impostare le chiavi SSH per l' command3esecuzione senza richiedere una password.


2
va notato che ciò avverrà in modo sincrono. Mentre ssh user@remote command3è in esecuzione, command4non può iniziare
aaaaa dice di ripristinare Monica il

3
@aaaaaa se non lo hai fattossh user@machine command3 &
Isaac,

3
@Isaac sì, il mio punto è che uno dei due può essere un comportamento desiderabile, ma dovrebbe essere una decisione consapevole
aaaaa dice di reintegrare Monica il

2

Presumo che tu abbia già un'idea di come identificherai il file che vuoi copiare e che sei in grado, o hai già, scritto uno script o una serie di comandi che verranno eseguiti sul computer remoto che esegue questa identificazione .

Inoltre supporrò anche che quei comandi stampino sull'output standard l'intero percorso del file, o il percorso relativo al file, relativamente alla home directory dell'utente SSH utilizzata per la copia. Nel mio esempio, il nome dello script è "getfilepath.sh", sebbene non debba essere uno script di shell, potrebbe essere un altro eseguibile o addirittura una serie di comandi.

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

Nel codice sopra, la notazione "$ ()" è un modo per catturare l'output standard di un comando come variabile di shell. È abbastanza standard, ma se stai usando una shell che non la capisce, puoi invece racchiudere il comando con "back-tick", che sono gli accenti a sinistra del tasto 1 sulla maggior parte delle tastiere statunitensi.


0

forse è possibile attivare un'attività pianificata sul computer remoto che fa tutto il lavoro.

Ciò ti impedirebbe di essere connesso al computer remoto mentre stai cercando la posizione dei file che desideri copiare.

Sto facendo questo:

la riga di comando innesca un'attività pianificata che esegue un batchscript nel mio caso.

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

I migliori saluti

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.