2009-10-27 13 views
14

Vorrei un comando che ssh'es in una macchina, esegue un comando (cd o esegue uno script o su), e poi mi dà la shell. Passare un comando a ssh sembra sempre uscire.ssh con comando .... Più la shell

Alcuni esempi di quello che sto cercando: 'mi ssh @ machine1 './executeMyScript & & cd/developmentDirectory'' e poi mi dà il mio guscio posteriore.

I motivi per cui voglio farlo sono perché sto usando mrxvt (termini a schede x) che mi consente di definire i comandi per tutte le mie schede da eseguire all'avvio. Mi piacerebbe avere alcune connessioni ssh alla stessa macchina ma farle fare cose diverse dopo averle sshing.

-Rob

Grazie!

risposta

10

Variazione sulle altre risposte davvero, utilizzare l'opzione -t di ssh per forzare l'assegnazione pseudo-tty:

ssh -t [email protected] ./executeMyScript '&&' bash -i 
+0

grazie! al primo sopralluogo, funziona esattamente come mi piacerebbe! Evviva per "-t"! – robarson

+0

Anche se questa domanda ha avuto una risposta adeguata, se qualcuno sta leggendo, sai come posso avere l'istanza di bash che inizio con questo comando apri emacs (in modo che quando chiudo emacs, ritorni al mio terminale bash) ? Diamine .. anche qualcosa che apre emacs senza bash sarebbe buono (tale che emacs non si chiude immediatamente dopo l'avvio). – robarson

4

Come su

ssh [email protected] ./executeMyScript '&&' bash -i 

Bisogna citare il && quindi si passerà alla macchina remota invece che inghiottito dalla shell locale.

citare un personaggio ';' ed è possibile modificare la directory di avvio, anche:

ssh [email protected] ./executeMyScript '&&' cd /developmentDirectory ';' bash -i 
+0

Grazie. La chiamata a bash ha funzionato ...infosar come mi ha dato un guscio. Sfortunatamente non funziona molto bene .. semplici scorciatoie da tastiera come ctrl^a non funzionano, il che significa che ho bisogno di provare e trovare una soluzione diversa. btw, stampa anche "bash: no job control in this shell". – robarson

+3

Prova con l'opzione '-t':' ssh -t me @ machine ... ' – mob

2

Mettete qualcosa di simile alla fine dello script che si desidera eseguire:

bash -li 

Che inizia Bash come una shell di login interattiva. Non è perfetto, dal momento che ti mancheranno cose come l'inoltro TERM, ma potrebbe essere adeguato alle tue esigenze.

Se non è sufficiente, mi piacerebbe solo fare due chiamate ssh separati, uno per eseguire lo script e un altro per me il login.

+0

+1 per due comandi ssh separati. BACIO –

2

ne dite di usare l'opzione SendEnv in ssh_config per inviare un ambiente specifico opzione dalla tua macchina locale alla macchina remota seguita controllando per quella variabile di ambiente nella configurazione dell'host remoto?

Nel vostro .ssh/speciale-config-file:

remotehost: 
    SendEnv * 

Lo script locale:

RUN_THIS_FIRST_COMMAND=blah 
ssh -F special-config-file 

tuo .bash_profile remoto:

if [ "$RUN_THIS_FIRST_COMMAND" != "" ] ; then 
    $RUN_THIS_FIRST_COMMAND 
fi 

Potrebbe essere necessario controllare alcune di queste righe, l'ho appena buttato fuori dalle pagine man e non ho mai provato nulla di simile prima. Personalmente non mi piace dover modificare sia il mio ambiente locale che quello remoto per questa soluzione.

0

Questo funziona per me.

/usr/bin/ssh -t yourdomain.com "cd /directory; bash -i" 
+2

Perché ha funzionato per te? Fornisci maggiori dettagli in modo che l'OP possa capire perché hai scritto ciò che hai fatto. – rayryeng

+1

È anche una copia più o meno diretta della risposta scelta esistente, pubblicata 4 anni fa ... – Synchro

+0

Una spiegazione sarebbe carina. –