ssh
作業ディレクトリを強制的に変更したり、~/.ssh/config
他の設定ファイルを使用したりする方法はありますか?
さまざまな環境のサーバーがたくさんあります。各環境は特定のディレクトリにインストールされるため、ログイン後すぐにそのディレクトリに移動するのが非常に便利です。
残念ながら、時には同じサーバー上で複数の環境をホストすることがあります。
これがまさに構成ベースにする必要がある理由です。現在、各環境の構成に別々の項目があるためです。例:
Host env1
User me
Port 2222
# here directory should be /srv/project/env1
HostName 172.16.16.2
Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
HostName 172.16.16.2
Host env54
User me
Port 2225
# here directory should be /srv/project/env54
HostName 172.16.16.3
これを行うために使用できますが、ssh -t env54 'cd /srv/project/env54 ; bash'
挿入するには毎回再入力する必要がありますalias
。
私は* nixメソッドが設定を介してこれを処理すると信じています。
答え1
サーバー.profile
またはログイン時に実行されるすべての項目で:
if [ -n "$USE_DIR_A" ]; then
cd dir_a
elif [ -n "$USE_DIR_B" ]; then
cd dir_b
fi
その後、ローカルコンピュータに設定します。両方可変的な:
export USE_DIR_A=yes
export USE_DIR_B=yes
そして、.ssh/config
次のように設定を指定してください。
Host env1
User me
Port 2222
# here directory should be /srv/project/env1
SendEnv USE_DIR_A
HostName 172.16.16.2
Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
SendEnv USE_DIR_B
HostName 172.16.16.2
もちろん、変数を送信し、その変数を各システムに必要なディレクトリに設定するssh設定を持つことができますが、これはユーザーが必要とするものではありません。
ただし、SSH接続の共有に注意してください。これは、後続の接続の開始時に実行されるスクリプトに影響を与える可能性があります。
答え2
command=cd /srv/project/env1 && bash
リモートサーバーファイル~/.ssh/authorized_key
のフラグを使用して、ソースサーバーの適切な公開鍵を取得できます。詳しくはこちらをご覧ください。質問serverfault や Authorized_keys ファイルの公開鍵コマンドなどの便利なオプションの詳細については、次を参照してください。ブログ。
テストマシン(VirtualboxのCentos 6.5)でこれを試しましたが、うまくいきました。
[root@CentOS-VM1 ~]# ssh nischay@localhost
[nischay@CentOS-VM1 demo]$ pwd
/tmp/demo
内容~/.ssh/authorized_keys
は
command="cd /tmp/demo && bash" ssh-dss AAAAB3NzaC1kc3MAAACBAOEKjYcSts6XZEtdzlYCAArgijN2yzi1RwlhOf7E2LHPqUI6z+od9Ye/E5e0imaJhyGvfb21b6o3U6PzWrwVIGZn9TA2/iiaaQS2R2w60/R07FY1tmas8y6TTmfelir/ZfAQnq4OT1KEf5SsYk4TIaC1h5gIL3wGhZyh54dsL1w1AAAAFQCj22qNcmQPToLi/P7sXH3SplxK8QAAAIEAsbiS8hQMjE0HkdCL0sT8/GFBJIo8EuNQh4AEjRv/5DU8Vk5i1CV7qO//spp8h/l5cDBWEC30VBWYk9jbN647VQonn24oXz3aXyQCsPYuqCDGl1MqhUdbHunXk9+YSU7Z13xc66LOD+oURJxFGTzndG5TnvPwhbSZsxebWMPlciYAAACAAe/gdrLn4Zkdp72Oa4JYKbaVD0rhW/p5eg+lSX8cm1m6nbYvGzcfaKF3cKTggGJH37IrDpMnAmuxzFJOryefDeUqGd/HmUOVN8PFnIJpSDQ1StOFx+0WwpiOHLXF4aaOpE/3SLrweuxywWDv4wymp0rXoSzL4mtNtB+u3pEOTgU= root@CentOS-VM1
ポート番号、ホスト名エイリアス、ユーザー名、秘密鍵、ポート転送オプションなどの他のオプションは、~/.ssh/config
ソースボックスのファイルに記載されています。
答え3
あなたの質問を正しく理解し、環境ごとに異なるSSHポートがあるとします。もしそうなら: -
.bash_profile
各リモートコンピュータに次のバリエーションを追加します。
if [[ ! -z $SSH_CLIENT ]]; then
PORT=$(echo "$SSH_CLIENT" | awk '{print $3}')
case $PORT in
2222)
cd /srv/project/env1
;;
2225)
cd /srv/project/env2
;;
esac
if