我想要一个脚本,通过 ssh 连接到远程服务器,然后运行本地计算机上的脚本,然后将输出存储在本地计算机上
期望 ssh 到远程服务器的脚本:
#!/usr/bin/expect -f
set Timeout 2
set IPaddress 10.118.137.78
set Username "username"
set Password "password"
spawn ssh $Username@$IPaddress
expect "ssword:"
send "$Password\r"
在远程机器上运行并收集数据的脚本:
#!/bin/sh
for serveraddress in `cat list.out`
do
"seeisso $serveraddress | grep -E -i ' os |proddropdown'"
done >> getos
=== 不确定如何:1. 结合两者并获得结果。2 在期望脚本中,它不采用 \r 并返回换行符。
答案1
快速示例
#!/usr/bin/expect -f
set timeout -1
set Username "user"
set password "pass"
set ipaddress "host"
set script "script-name"
spawn $env(SHELL)
send -- "ssh $Username@$ipaddress $script\r"
expect "assword: "
send -- "$password\r"
send -- "exit\r"
expect eof
这将在远程端执行脚本。我没有过多地摆弄它,但完成后你必须按Ctrl+C 退出 expect。此时,我将为小型环境设置 ssh 密钥,并为更大的环境使用 puppet 或其他东西来管理它,然后为更大的环境设置单点登录,可能是 kerberos。