Як SSH в конкретний каталог?


39

Я часто входжу на сервер, а потім переходжу в певний каталог. Чи можна спростити ці дві команди в одну?

ssh bob@foo  
cd /home/guest

Я хотів би уникати нічого не змінювати на "foo", якщо це можливо, оскільки мені доведеться очистити це з адміністратором сервера. Я використовую bash, але я відкритий для відповідей в інших оболонках.

Відповіді:


22

Просто поставте в останній рядок файлу ~ bob / .bash_profile foo:

cd /home/guest >& /dev/null

Тепер при кожному вході (за допомогою SSH чи іншим способом) команда cd запускається. Ніяких зв'язків із ssh не потрібно.

Я знаю, що ви писали, що "хочете уникати нічого змінити на" foo ", якщо можливо", але якщо обліковий запис bob @ foo ваш, зміна власного .bash_profile має бути прийнятною, ні?


2
Чому так, я думаю, що це буде чудово. Мені не потрібно буде отримувати дозвіл від ІТ для внесення цих змін. Чи можете ви детальніше пояснити, для чого вам потрібен> & / dev / null?
спудер

6
Я думаю, що так і має бути &> /dev/null. Це запобігає будь-якому повідомленню про помилку, яке може бути показане на випадок, якщо компакт-диск не змінить каталог на / home / directory. Якщо ви хочете побачити ці повідомлення, ви можете просто виключити це.
konsolebox

5
>&і &>такі самі у Баша. Останній стиль вважається кращим.

Крім того, перенаправлення на / dev / null запобігає тому, щоб ім'я каталогу не перегукувалося на екрані, що може "робити" cd.
DanB

41

Це працює з OpenSSH:

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

Останній аргумент запускається у вашій оболонці входу. -tПрапор передається sshсили , sshщоб виділити псевдо-термінал, який необхідний для інтерактивної оболонки. -lПрапор передається bashпочинає бити в якості входу в оболонку .


3
Цікаво, чи може бути корисним додавання варіанту -l до баш? ... && exec bash -l
konsolebox

1
@konsolebox: Це гарна ідея. Я додав це до своєї відповіді.

17

Ви також можете це зробити так, як рішення @ EvanTeitelman:

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

Або якщо ви не знаєте оболонки на іншому кінці:

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

Або так:

$ ssh -t bob@foo 'cd /tmp && exec $SHELL'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.