Как 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?
spuder

6
Я думаю, что так и должно быть &> /dev/null. Это предотвращает появление любого сообщения об ошибке, которое может появиться на случай, если cd не сможет изменить каталог на / home / directory. Если вы хотите видеть эти сообщения, вы можете просто исключить это.
konsolebox

5
>&и &>то же самое в Баш. Последний стиль предпочтительнее, хотя.

Кроме того, перенаправление в / dev / null предотвращает отображение имени каталога на экране, что может сделать «cd».
ДанБ

41

Это работает с OpenSSH:

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

Последний аргумент выполняется в вашей оболочке входа в систему. -tФлаг передается sshсилы , sshчтобы выделить псевдо-терминал, который необходим для интерактивной оболочки. Переданный -lфлаг bashзапускает bash как оболочку входа в систему .


3
Интересно, было бы полезно добавить опцию -l к bash? ... && 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.