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