一定期間にわたってコマンドを「ストリーム」するための永続的な SSH 接続を作成するにはどうすればよいでしょうか?

一定期間にわたってコマンドを「ストリーム」するための永続的な SSH 接続を作成するにはどうすればよいでしょうか?

ある PC でアプリケーションが実行されていて、そのアプリケーションが SSH 経由でネットワーク上の別の PC (両方のマシンとも Linux を実行) にコマンドを送信しているとします。

たとえば、#1 で何かが起こるたびに、#2 でタスクを実行したいとします。この設定では、コマンドごとに SSH 接続を作成する必要があります。

カスタム クライアント/サーバー アプリケーションをプログラミングせずに、基本的な UNIX ツールを使用してこれを行う簡単な方法はありますか? 基本的に、SSH 経由で接続を確立し、コマンドを次々に送信したいだけです。

答え1

本番環境で使用できるかどうかはわかりませんが、次のようなことができます。

#1 にファイルを作成する

1>touch /tmp/commands

次にコマンドを実行します:

1>tail -f /tmp/commands | ssh [email protected]

これにより、ファイル/tmp/commandsが開き、その内容がサーバーxxxx(#2)に送信され、そこで1行ずつ実行されます。

これからは、#1 で何かが起こるたびに、次の操作を実行します。

1>echo "ls -l" >> /tmp/commands

または

1>echo "reboot" >> /tmp/commands

ファイル /tmp/commands に追加したものはすべて #2 に送信され、実行されます。対話的な操作を実行したり、何らかの方法で対処したりしないようにしてください。

答え2

OpenSSH を使用した自動永続化

ControlMasterまた、最初の接続用に Unix ドメイン ソケットを開き、その後のすべての呼び出しでこの接続を再利用する OpenSSH の機能を使用することもできます。

この機能を有効にするには、 を-Mコマンド ライン スイッチとして使用するか、ControlMasterでオプションを有効にします~/.ssh/ssh_config。例:

ControlMaster auto

さらに、ControlPathで次の行を使用してを設定する必要があります~/.ssh/ssh_config

Host *
   ControlPath ~/.ssh/master-%r@%h:%p

ホストへの永続的な接続を維持するには、たとえば、スクリプトの実行中はホストへの多数の SSH 接続を確立する必要のあるスクリプトを実行し、そのいずれもがスクリプトの実行中は持続しない場合は、次のコマンドを使用して事前にサイレント接続を開始できます。

ssh -MNf remotehost

さようなら、ねその

答え3

/etc/ssh/ssh_config追加で

# Send keep alive signal to remote sshd
ServerAliveInterval 60

答え4

はい、パイプを使えば可能です:

echo 'echo "hi"' | ssh -i my_private_key tester@host2

これはhost2でecho "hi"コマンドを実行します。

コマンドを発行するだけのプログラムを書くだけで(;を忘れないでください)、その出力をsshにパイプするだけです。

関連情報