6

У меня есть большое количество машин Linux, все из которых монтируют мой домашний каталог через NFS. Если я нахожусь в ~/foo/bar/baz, я бы хотел иметь возможность подключиться по ssh к другому компьютеру и автоматически начать использовать его в качестве своего рабочего каталога. Там не кажется, легкий способ сделать это; Я могу подумать о некоторых хакерских, но хотел бы проверить, прежде чем пытаться их.

4 ответа4

5

Проверьте SendEnv (в ssh_config) и AcceptEnv (в sshd_config). Вы можете отправить PWD; хотя на принимающей стороне просто получить PWD будет недостаточно, чтобы запустить новую оболочку в нужном каталоге.

Так что вы можете сделать что-то вроде:

  1. поместите SendEnv SSH_PWD в ваш ssh_config и AcceptEnv SSH_PWD в ваш sshd_config .
  2. Добавьте следующее в ваш .profile или .bash_profile:

:

alias ssh='env SSH_PWD="$PWD" /bin/ssh'
if [ -n "$SSH_PWD" ]; then
   cd "$SSH_PWD"
   unset SSH_PWD
fi
1

Как насчет этой функции bash (при условии, что bash действительно является вашей оболочкой):

sshcd() {
    CWD=`pwd`
    HOME_BASED=${CWD#$HOME}
    ssh -t $1 "cd ~$HOME_BASED;bash -l"
}

Затем вы можете сделать sshcd foobar для ssh на foobar, изменить каталог там и запустить bash.

0

Я не знаю, считается ли это "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 будет закрыто.

Я не проверял это, но это может быть отправной точкой.

Удачи!

0

Вы можете использовать следующее:

#!/bin/sh
set -eu
gnome-terminal -x ssh -t "$@" "cd $PWD && $SHELL -il"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .