Wie SSH in ein bestimmtes Verzeichnis?

39

Ich logge mich häufig auf einem Server ein und wechsle dann in ein bestimmtes Verzeichnis. Ist es möglich, diese beiden Befehle in einem zu vereinfachen?

ssh bob@foo  
cd /home/guest

Ich würde es gerne vermeiden, irgendetwas in 'foo' zu ändern, da ich es mit dem Serveradministrator klären muss. Ich benutze Bash, bin aber offen für Antworten in anderen Shells.

Spuder
quelle

Antworten:

22

Stellen Sie einfach die letzte Zeile Ihrer ~ bob / .bash_profile-Datei auf foo:

cd /home/guest >& /dev/null

Jetzt wird jedes Mal, wenn Sie sich anmelden (ob über SSH oder auf andere Weise), der Befehl cd ausgeführt. Es ist kein Herumspielen mit ssh notwendig.

Ich weiß, dass Sie geschrieben haben, dass Sie "vermeiden möchten, wenn möglich, irgendetwas an 'foo' zu ändern", aber wenn das bob @ foo-Konto Ihnen gehört, sollte es akzeptabel sein, Ihr eigenes .bash_profile zu ändern, nicht wahr?

DanB
quelle
2
Warum ja, ich denke das wird großartig funktionieren. Ich brauche keine Erlaubnis von der IT, um diese Änderung vorzunehmen. Können Sie erläutern, warum Sie> & / dev / null benötigen?
Spuder
6
Ich denke das sollte sein &> /dev/null. Es verhindert, dass eine Fehlermeldung angezeigt wird, falls cd das Verzeichnis nicht in / home / directory ändert. Wenn Sie diese Nachrichten sehen möchten, können Sie dies einfach ausschließen.
Konsolebox
5
>&und &>sind die gleichen in Bash. Der letztere Stil wird jedoch bevorzugt.
Darüber hinaus verhindert die Umleitung nach / dev / null, dass der Name des Verzeichnisses auf dem Bildschirm wiedergegeben wird, was "cd" möglicherweise bewirkt.
DanB
41

Dies funktioniert mit OpenSSH:

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

Das letzte Argument wird in Ihrer Anmeldeshell ausgeführt. Das -tFlag wurde an sshForces übergeben ssh, um ein Pseudo-Terminal zuzuweisen, das für eine interaktive Shell erforderlich ist. Das -lFlag, das übergeben wird, bashstartet bash als Login-Shell .

Gemeinschaft
quelle
3
Ich frage mich, ob das Hinzufügen der Option -l zum Bash ebenfalls hilfreich ist. ... && exec bash -l
Konsolebox
1
@konsolebox: Das ist eine gute Idee. Ich habe das zu meiner Antwort hinzugefügt.
17

Sie können dies auch auf diese Weise tun, ähnlich wie bei der @ EvanTeitelman-Lösung:

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

Oder wenn Sie die Shell am anderen Ende nicht kennen:

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

Oder so:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
slm
quelle