web-dev-qa-db-ja.com

ssh config:ProxyCommandの代替?

ProxyCommandの助けを借りて、使いやすさのためにいくつかのsshお気に入りを設定しました。

Host some_server
    hostname some_server
    port 22
    user some_user
    IdentityFile /home/user/.ssh/id_rsa
    ProxyCommand ssh frontserver1 -W %h:%p

Host frontserver1
    hostname frontserver1.url.tld
    port 22
    user some_user
    IdentityFile /home/user/.ssh/id_rsa

今日、frontserver1のダウンタイムは長くなっていますが、frontserver2またはfrontserver3を介して接続することもできます。ただし、some_server_via_front2などのように、すべてを再度セットアップする必要があります。これにより、到達したいイントラネットサーバーごとにn個のエントリが作成されます(多数あります)。ここで、nはフロントサーバーの数です。

もっと簡単な方法はありますか?

ProxyCommandの代替を設定できますか?

次のようなもの:ProxyCommand ssh frontserver1 -W %h:%pに到達できない場合は、ProxyCommand ssh frontserver2 -W %h:%pに移動し、次にfrontserver3、..に移動します。

1
daniel451

マニュアルが言うことを考えると:

 ProxyCommand
         Specifies the command to use to connect to the server.  The com-
         mand string extends to the end of the line, and is executed using
         the user's Shell `exec' directive to avoid a lingering Shell
         process.

シェルの論理OR演算子を使用できるため、次のようになります。

Host some_server
    hostname some_server
    port 22
    user some_user
    IdentityFile /home/user/.ssh/id_rsa
    ProxyCommand ssh frontserver1 -W %h:%p || ssh frontserver2 -W %h:%p || ssh frontserver3 -W %h:%p

Host frontserver1
    hostname frontserver1.url.tld
    port 22
    user some_user
    IdentityFile /home/user/.ssh/id_rsa
    ConnectTimeout 5

Host frontserver2
    hostname frontserver1.url.tld
    port 22
    user some_user
    IdentityFile /home/user/.ssh/id_rsa
    ConnectTimeout 5

Host frontserver3
    hostname frontserver1.url.tld
    port 22
    user some_user
    IdentityFile /home/user/.ssh/id_rsa
    ConnectTimeout 5

私は、各プロキシホストにConnectTimeoutディレクティブを自由に追加して、リストの3番目のホストを超えて最終的に失敗するのに最大15秒かかるようにしましたnホスト数の倍数ホストのデフォルトのTCPタイムアウト設定が発生した場合)。

2
DopeGhoti