Come SSH in una directory specifica?


39

Accedo spesso a un server, quindi eseguo il cd in una directory specifica. È possibile semplificare questi due comandi in uno?

ssh bob@foo  
cd /home/guest

Vorrei evitare di cambiare qualcosa su "pippo", se possibile, poiché dovrò cancellarlo con l'amministratore del server. Uso bash, ma sono aperto alle risposte in altre shell.

Risposte:


22

Inserisci l'ultima riga del tuo file ~ bob / .bash_profile su foo:

cd /home/guest >& /dev/null

Ora ogni volta che accedi (tramite SSH o in altro modo), il comando cd verrà eseguito. Non è necessario scherzare con ssh.

So che hai scritto che "vorresti evitare di cambiare qualcosa su" pippo "se possibile", ma se l'account bob @ pippo è tuo, cambiare il tuo .bash_profile dovrebbe essere accettabile, no?


2
Perché sì, penso che funzionerà alla grande. Non avrò bisogno dell'autorizzazione dell'IT per apportare tale modifica. Potresti approfondire il motivo per cui hai bisogno> & / dev / null?
spuder

6
Penso che dovrebbe essere &> /dev/null. Previene qualsiasi messaggio di errore che può essere visualizzato nel caso in cui cd non cambi la directory in / home / directory. Se vuoi vedere quei messaggi potresti semplicemente escluderlo.
konsolebox

5
>&e &>sono gli stessi in Bash. Quest'ultimo stile è preferito però.

Inoltre, il reindirizzamento su / dev / null impedisce che il nome della directory venga ripetuto sullo schermo, cosa che può fare "cd".
DanB,

41

Funziona con OpenSSH:

ssh -t bob@foo 'cd /home/guest && exec bash -l'

L'ultimo argomento viene eseguito nella shell di accesso. La -tbandiera passò alle sshforze sshper allocare uno pseudo-terminale, necessario per una shell interattiva. Il -lflag passato a bashinizia bash come shell di login .


3
Mi chiedo, sarebbe utile aggiungere anche l'opzione -l a bash? ... && exec bash -l
konsolebox

1
@konsolebox: è una buona idea. L'ho aggiunto alla mia risposta.

17

Puoi anche farlo in questo modo, in modo simile alla soluzione di @ EvanTeitelman:

$ ssh -t bob@foo "cd /tmp ; bash"

O se non conosci la shell dall'altra parte:

$ ssh -t bob@foo "cd /tmp && exec \$SHELL"

O così:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
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.