2012-02-15 12 views
20

Mi trovo a dover accedere a vari server, impostare variabili di ambiente e quindi lavorare in modo interattivo.Posso eseguire ssh da qualche parte, eseguire alcuni comandi e quindi lasciare un prompt?

ad es.

$ ssh anvil 
[email protected]$ export V=hello 
[email protected]$ export W=world 
[email protected]$ echo $V $W 
hello world 

Come è possibile combinare i primi comandi e quindi lasciarmi al prompt?

Qualcosa di simile:

$ ssh anvil --on-login 'export V=hello; export W=world;' 
[email protected]$ echo $V $W 
hello world 

Ovviamente questo è un problema modello. Quello che sto chiedendo veramente è "come faccio a ssh su una macchina diversa, a eseguire alcuni comandi e poi a continuare come se li eseguissi a mano?"

risposta

22

Probabilmente la cosa più semplice è:

 
$ ssh -t host 'cmd1; cmd2; sh -i' 

Se si desidera impostare le variabili, fare:

 
$ ssh -t host 'cmd1; cmd2; FOO=hello sh -i' 

Si noti che questo è un terribile hack, e si sarebbe molto meglio mettere il vostro desiderato comandi iniziali in uno script e fare:

 
$ scp setup host:~ 
$ ssh host 
host$ . setup 
+0

Questo è esattamente il genere di cosa che mi piacerebbe, ma non funziona lo stesso. Dice cose come "nessun controllo del lavoro" e le pagine man non usano un cercapersone. –

+1

@JohnLawrenceAspden Prova ad aggiungere -t –

+0

William, perché dici che questo è un terribile trucco. Sembra funzionare come un fascino. C'è qualcosa di inaspettato in attesa di mordermi? A cosa serve -i? –

10

si potrebbe anche utilizzare il seguente expect script:

#!/usr/bin/expect -f 
spawn ssh $argv 
send "export V=hello\n" 
send "export W=world\n" 
send "echo \$V \$W\n" 
interact 
+0

Questo è super. Avrei preferito avere qualcosa che potesse stare su una riga di comando (e così apparire nella cronologia, nelle note, ecc.). Ma posso fare questo lavoro per quello che voglio. Grazie! –

+0

Risposta stupenda. Questo e 'esattamente quello che stavo cercando. –

1

E ' vale la pena notare che ssh -t può effettivamente essere utilizzato per connettersi a un host tramite un altro host.

Così, per esempio, se si desidera eseguire un comando su incudine, ma incudine è accessibile solo da host porta (da ecc firewall), si può fare in questo modo:

ssh gateway -t 'ssh anvil -t "export V=hello; export W=world;bash -l";' 

uscita dal incudine, sarà anche la sessione di Gateway (se si vuole rimanere sul gatway dopo aver lasciato l'incudine che solo aggiungere un altro bash -l prima chiudendo il comando.

Problemi correlati