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キーを使用する必要があります。