Я часто хочу использовать 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
Очевидно, это дикий взлом, но он работает.