我有大量 Linux 机器,它们都通过 NFS 安装我的主目录。如果我在 ~/foo/bar/baz,我希望能够通过 ssh 连接到另一台机器并自动开始将其用作我的工作目录。似乎没有简单的方法可以做到这一点;我可以想到一些 hack 方式,但在尝试之前我想先检查一下。
答案1
查看 SendEnv (在 中ssh_config
) 和 AcceptEnv (在 中sshd_config
)。您可能能够发送 PWD;尽管在接收端仅获取 PWD 不足以使新 shell 在所需目录中启动。
因此你可以做类似的事情:
- 放入
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
答案2
这个 bash 函数怎么样(假设 bash 真的是你的 shell):
sshcd() {
CWD=`pwd`
HOME_BASED=${CWD#$HOME}
ssh -t $1 "cd ~$HOME_BASED;bash -l"
}
然后您可以sshcd foobar
通过 ssh 访问 foobar,在那里更改目录并运行 bash。
答案3
我不知道这是否被认为是“Hacky”,但是这里有一个想法:
由于您的主目录在所有服务器上共享,因此登录时将执行相同的配置文件。您可以让您的 .profile 在底部执行如下操作:
CURR_DIR=$(cat ~/.current_dir)
if [[ -n $CURR_DIR ]] && [[ -d $CURR_DIR ]]; then
cd $CURR_DIR
fi
~/.current_dir
然后,为您的 SSH 命令创建别名来运行一个脚本,该脚本会在运行 SSH 命令之前将当前目录放入您的文件中,并~/.current_dir
在关闭 SSH 连接后删除该文件。
我还没有测试过这个,但它可能是一个起点。
祝你好运!
答案4
您可以使用以下内容:
#!/bin/sh
set -eu
gnome-terminal -x ssh -t "$@" "cd $PWD && $SHELL -il"