ssh 但保留当前工作目录

ssh 但保留当前工作目录

我经常想通过 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

显然,这是一种疯狂的攻击,但它确实有效。

相关内容