SSH コマンドを使用した応答のキャプチャ [閉じる]

SSH コマンドを使用した応答のキャプチャ [閉じる]

sshpassとsshを使用してLinuxシステムにコマンドを送信し、切断します。コマンドは正しく送信されましたが、期待した応答が得られませんでした。ログイン後、ホストは5行の空行を送信し、5行のバナーを送信することを確認しました。

sshコマンド(コマンドを引数として渡すとき)は、最初の空行のみを返すようです。すべてのテキストを返す方法はありますか? (または返す前にすべてのテキストをキャプチャするために5秒間待ってください)


コマンドは次のようになり、応答を Bash 変数としてキャプチャします。

RESPONSE=$(sshpass .... ssh..... "my command")

答え1

これにより、ホストの出力をキャプチャできます。

user@host /tmp# output=$(ssh login@domain "ls")
login@domain's password:
user@host /tmp# echo $output
file1
file2
file3

別の解決策は、出力だけでなくバナーを含むすべてを記録するので、はるかに優れています。

ssh user@domain |tee /tmp/output

ここで、/tmp/output にはログ全体が含まれます。

答え2

壁をキャプチャするには、Expectスクリプトを生成する必要があります。

#!/usr/bin/expect -f
spawn sshpass -p XXX ssh login@domain
expect "$ "
send "ls\r"
expect "$ "
send "exit\r"

次のように出力をキャプチャします。

OUTPUT=$(expect expectscript)

SSHキーを使用する必要があります。

関連情報