ある 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にパイプするだけです。