web-dev-qa-db-ja.com

sshですが、現在の作業ディレクトリを保持します

別のサーバーにSSHで接続したいことがよくありますが、作業ディレクトリは保持します。 (すべてのサーバーに同じNFSがあるため、通常、すべてのサーバーに同じディレクトリパスが存在します。)これを行うことは可能ですか?

4
jhourback

個人的にはalias sshは好きではありません。私がその仕事をするために見つけた最も少ない文字数は:

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

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
2
Koen.

リモートサーバーが(sshd_configで)事前構成されている場合

AcceptEnv CURRENT_DIR

そして、あなたは含まれています

cd "$CURRENT_DIR"

リモートサーバーの〜/ .bashrcの最後の行として、

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

これは回避策ですが、うまくいきます。

2
adaptr

リモートサーバーの構成を変更できず、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

明らかに、これはワイルドハックですが、機能します。

0
Sven