我经常想通过 ssh 进入不同的服务器,但保留我的工作目录。(我们所有的服务器都具有相同的 NFS,因此所有服务器上通常都存在相同的目录路径。)可以这样做吗?
答案1
我个人不喜欢alias ssh
。我发现完成这项工作所需的最少字符数是:
ssh user@hostname -t "cd $PWD;bash"
答案2
如果远程服务器已预先配置(在 sshd_config 中)
AcceptEnv CURRENT_DIR
你还包括
cd "$CURRENT_DIR"
作为远程服务器 ~/.bashrc 中的最后一行,你可以连接
CURRENT_DIR="$PWD" ssh user@host -o SendEnv=CURRENT_DIR
这是一种解决方法,但它会...起作用。
答案3
我找到了一个很好的解决方案超级用户网这与@adaptr 的解决方案非常相似,但无需手动设置环境变量。
通过创建别名,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
答案4
如果您无法更改远程服务器的配置并使用基于密钥的 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
显然,这是一种疯狂的攻击,但它确实有效。