SSH但保持当前的工作目录

我经常想要SSH入不同的服务器,但保留我的工作目录。 (我们所有的服务器都具有相同的NFS,因此所有服务器上都存在相同的目录path。)是否可以这样做?

我个人不喜欢alias ssh 。 我发现做这个工作的人物最less的是:

 ssh user@hostname -t "cd $PWD;bash" 

如果远程服务器已经预先configuration(在sshd_config中)

 AcceptEnv CURRENT_DIR 

而你包括在内

 cd "$CURRENT_DIR" 

作为远程服务器的〜/ .bashrc中的最后一行,可以连接

 CURRENT_DIR="$PWD" ssh user@host -o SendEnv=CURRENT_DIR 

这是一个解决方法,但它会…工作。

我在superuser.com上find了一个很好的解决scheme,就像@ adaptr的解决scheme,但是没有手动设置环境variables。

通过为ssh创build一个别名,你可以自动设置该variables:

 alias ssh='env SSH_PWD="$PWD" /bin/ssh' 

~/.ssh/configconfigurationssh来发送SSH_PWDvariables:

对于单个主机添加:

 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 

如果您不能更改远程服务器的configuration,并使用基于密钥的SSHlogin与ssh-agent (因此不必每次都必须input密码或密钥密码),另一个骇客法:

在您的本地机器上,创build一个包装脚本(例如/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 

显然,这是一个狂野的黑客,但它的工作。