Il mio approccio preferito è usare il file di configurazione SSH (descritto di seguito), ma ci sono alcune possibili soluzioni a seconda dei tuoi usi.
Argomenti della riga di comando
Penso che la migliore risposta per questo approccio sia la risposta di christianbundy alla risposta accettata:
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
L'uso di virgolette doppie ti consentirà di utilizzare le variabili dal tuo computer locale, a meno che non siano salvate (come $SHELL
qui). In alternativa, è possibile utilizzare virgolette singole e tutte le variabili utilizzate saranno quelle della macchina target:
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
Funzione Bash
Puoi semplificare il comando avvolgendolo in una funzione bash. Diciamo che vuoi solo digitare questo:
sshcd example.com /foo/bar
Puoi farlo funzionare aggiungendolo al tuo ~/.bashrc
:
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
Se si utilizza una variabile esistente sul computer remoto per la directory, assicurarsi di evitarlo o di inserirlo tra virgolette singole. Ad esempio, questo eseguirà il cd nella directory memorizzata nella JBOSS_HOME
variabile sul computer remoto:
sshcd example.com \$JBOSS_HOME
File di configurazione SSH
Se desideri vedere questo comportamento in continuazione per host specifici (o qualsiasi) con il normale comando ssh senza dover utilizzare argomenti di riga di comando aggiuntivi, puoi impostare le opzioni RequestTTY
e RemoteCommand
nel tuo file di configurazione ssh.
Ad esempio, vorrei digitare solo questo comando:
ssh qaapps18
ma voglio che si comporti sempre come questo comando:
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
Quindi ho aggiunto questo al mio ~/.ssh/config
file:
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
Ora questa regola si applica a qualsiasi host con "app" nel suo nome host.
Per ulteriori informazioni, consultare http://man7.org/linux/man-pages/man5/ssh_config.5.html