У меня есть большое количество машин Linux, все из которых монтируют мой домашний каталог через NFS. Если я нахожусь в ~/foo/bar/baz, я бы хотел иметь возможность подключиться по ssh к другому компьютеру и автоматически начать использовать его в качестве своего рабочего каталога. Там не кажется, легкий способ сделать это; Я могу подумать о некоторых хакерских, но хотел бы проверить, прежде чем пытаться их.
4 ответа
Проверьте SendEnv (в ssh_config
) и AcceptEnv (в sshd_config
). Вы можете отправить PWD; хотя на принимающей стороне просто получить PWD будет недостаточно, чтобы запустить новую оболочку в нужном каталоге.
Так что вы можете сделать что-то вроде:
- поместите
SendEnv SSH_PWD
в вашssh_config
иAcceptEnv SSH_PWD
в вашsshd_config
. - Добавьте следующее в ваш .profile или .bash_profile:
:
alias ssh='env SSH_PWD="$PWD" /bin/ssh'
if [ -n "$SSH_PWD" ]; then
cd "$SSH_PWD"
unset SSH_PWD
fi
Как насчет этой функции bash (при условии, что bash действительно является вашей оболочкой):
sshcd() {
CWD=`pwd`
HOME_BASED=${CWD#$HOME}
ssh -t $1 "cd ~$HOME_BASED;bash -l"
}
Затем вы можете сделать sshcd foobar
для ssh на foobar, изменить каталог там и запустить bash.
Я не знаю, считается ли это "Hacky" или нет, но вот идея:
Поскольку ваш homedir является общим для всех серверов, при входе в систему будет выполняться один и тот же профиль. Вы можете сделать так, чтобы ваш .profile внизу:
CURR_DIR=$(cat ~/.current_dir)
if [[ -n $CURR_DIR ]] && [[ -d $CURR_DIR ]]; then
cd $CURR_DIR
fi
Затем создайте псевдоним вашей команды SSH, чтобы запустить скрипт, который поместит ваш текущий каталог в ваш файл ~/.current_dir
перед выполнением команды SSH, и удалите файл ~/.current_dir
только соединение SSH будет закрыто.
Я не проверял это, но это может быть отправной точкой.
Удачи!
Вы можете использовать следующее:
#!/bin/sh
set -eu
gnome-terminal -x ssh -t "$@" "cd $PWD && $SHELL -il"