使用 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 密钥。

相关内容