別のサーバーにSSHで接続したいことがよくありますが、作業ディレクトリは保持します。 (すべてのサーバーに同じNFSがあるため、通常、すべてのサーバーに同じディレクトリパスが存在します。)これを行うことは可能ですか?
個人的にはalias ssh
は好きではありません。私がその仕事をするために見つけた最も少ない文字数は:
ssh user@hostname -t "cd $PWD;bash"
superuser.com で素敵な解決策を見つけました。これは@adaptrの解決策によく似ていますが、環境変数を手動で設定する必要はありません。
ssh
のエイリアスを作成することにより、その変数を自動的に設定できます。
alias ssh='env SSH_PWD="$PWD" /bin/ssh'
~/.ssh/config
変数を送信するようにSSH_PWD
でsshを構成します。
単一のホストの場合、これを追加します。
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
リモートサーバーが(sshd_configで)事前構成されている場合
AcceptEnv CURRENT_DIR
そして、あなたは含まれています
cd "$CURRENT_DIR"
リモートサーバーの〜/ .bashrcの最後の行として、
CURRENT_DIR="$PWD" ssh user@Host -o SendEnv=CURRENT_DIR
これは回避策ですが、うまくいきます。
リモートサーバーの構成を変更できず、ssh-agent
でキーベースのSSHログインを使用できない場合(したがって、毎回パスワードまたはキーパスフレーズを入力する必要がない)、別のハックなアプローチ:
ローカルマシンで、パスにあるラッパースクリプトを作成します(例:/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
明らかに、これはワイルドハックですが、機能します。