Назад | Перейти на главную страницу

ssh, но сохранить текущий рабочий каталог

Я часто хочу использовать ssh на другом сервере, но сохранить рабочий каталог. (Все наши серверы имеют один и тот же NFS и, следовательно, один и тот же путь к каталогу обычно существует на всех серверах.) Возможно ли это сделать?

Я лично не люблю alias ssh. Наименьшее количество символов, которые я нашел для выполнения этой работы:

ssh user@hostname -t "cd $PWD;bash"

Я нашел хорошее решение на superuser.com что очень похоже на решение @ Adaptor, но без ручной установки переменной окружения.

Создав псевдоним для ssh вы можете установить эту переменную автоматически:

alias ssh='env SSH_PWD="$PWD" /bin/ssh'

Настроить ssh в ~/.ssh/config отправить SSH_PWD переменная:

Для одного хоста добавьте это:

Host myhost
  SendEnv SSH_PWD

Или для всех хостов добавьте это в конец файла:

SendEnv SSH_PWD

И на удаленном сервере в вашем .profile или .bashrc:

if [ -n "$SSH_PWD" ] && [ -d "$SSH_PWD" ]; then
   cd "$SSH_PWD"
   unset SSH_PWD
fi

Если удаленный сервер был предварительно настроен (в sshd_config) с

AcceptEnv CURRENT_DIR

И вы включаете

cd "$CURRENT_DIR"

как последняя строка в ~ / .bashrc удаленных серверов, вы можете подключиться с помощью

CURRENT_DIR="$PWD" ssh user@host -o SendEnv=CURRENT_DIR

Это обходной путь, но он ... сработает.

Если вы не можете изменить конфигурацию удаленных серверов и использовать SSH-вход на основе ключей с ssh-agent (что избавляет вас от необходимости каждый раз вводить свой пароль или ключевую фразу-пароль), другой хакерский подход:

На вашем локальном компьютере создайте сценарий оболочки, который находится на вашем пути (например, /usr/local/bin/cdssh)

#!/bin/bash
TMPFILE="/tmp/$(basename $0).$$.tmp"
echo "cd `pwd`" > $TMPFILE
scp -q $TMPFILE $1:~/.cwdfile
ssh $@
rm $TMPFILE

На удаленном компьютере добавьте следующую часть в свой ~/.bashrc или ~/.profile:

if [ -f ~/.cwdfile ]; then
   cd ~/.cwdfile
   rm ~/.cwdfile
fi

Очевидно, это дикий взлом, но он работает.