ログイン後、SSHに設定に従ってディレクトリを強制的に変更させます。

ログイン後、SSHに設定に従ってディレクトリを強制的に変更させます。

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

関連情報