私は最近少し苦労しましたが、入れ子になったサーバーに自動的にログインして各サーバーからいくつかの情報を収集するスクリプトを作成したかったのです。 (具体的には各コンピュータから情報nvidia-smi
を収集するためGPU usage info
)
入れ子になったサーバー構造は次のとおりです。 (
user@boss
) 通常、操作を完了するにはログインを使用して特定のシステムに移動する必要がありますuser@machine1, user@machine2, user@machine3, ...
が、すべてのシステムのGPU使用率を監視するのは便利ではありません。例:ssh
user@boss
ssh
sshpass -p "xxxx" ssh -o StrictHostKeyChecking=no [email protected]
for v in machine1 machine2
do
sshpass -p "xxxx" ssh -o StrictHostKeyChecking=no v
echo $v
nvidia-smi
done
ただし、user@bossにのみログインします。私はサーバー関連のコンテンツに精通していません。 User@bossがルートノードなので、machine1、machine2、...は子ノードですか?誰でも助けることができますか? (参考までに私はroot権限を持っていません)
次へ追加user@boss、user@machine1、user@machine2などのサーバーはインストールされず、サポートのみですsshpass
。ssh
答え1
パスワード認証を使用しないでください。公開鍵認証のみを使用し、SSH鍵には安全で強力なパスワードを使用してください。
バラよりパスワードを使用するよりもSSHキーを使用する方が安全なのはなぜですか?キーとパスワードに関する興味深いディスカッションや関連する投稿へのリンクも提供されています。
常にプロキシホストを使用してリモートホストに接続するようにSSHを設定できます。
例えば~/.ssh/config
:
Host machine1 machine2 machine3
ProxyJump user@boss
それではssh machine1
そうです。いつも経由で接続してくださいboss
。
からman ssh_config
:
プロキシジャンプ
1つ以上のジャンププロキシをとして指定します
[user@]host[:port]
。複数のエージェントはコンマで区切ることができ、順次アクセスされます。
このオプションを設定すると、最初に指定されたホストへの(1)接続を確立し、そこから最終宛先へのTCP転送を確立して、宛先ホストへの
ssh
(1)接続を確立します。ssh
ProxyJump