使用expect后将命令发送到远程机器

时间:2014-05-28 13:05:22

标签: linux expect

您好我想从远程机器收集有关进程的一些信息 在它之后,杀死这个过程。

我用expect编写了一个脚本,我成功连接到远程机器 但是我不能发送其他命令,比如'who'并得到输出:

#!/usr/bin/expect

spawn ssh -o StrictHostKeyChecking=no -o CheckHostIP=no aaa@1.2.4.5
expect "Password:"
send "aaa1"
interact
send "who\r"
有人可以建议吗? 基本上我是期待的新人,所以我想这很简单,我可能会失踪。

谢谢大家。

2 个答案:

答案 0 :(得分:0)

您不需要expect。您需要基于密钥的SSH登录。您可以通过运行ssh-copy-id aaa@1.2.4.5一次来设置它来实现这一点,之后您应该能够运行:

ssh aaa@1.2.4.5 who

它不应该提示输入密码,因为它将使用您的SSH密钥。当然,如果你从未使用过SSH密钥,那么在ssh-copy-id之前可能需要运行ssh-keygen或类似代码。

答案 1 :(得分:0)

正如约翰指出的那样,也许你根本就不需要期待。如果你仍然想使用expect,那么这样的事情可能有用:

#!/usr/bin/expect                                                               

spawn ssh username@host                                                 
expect "*?assword:*"                                                            
send -- "yourPasswordHere\r"                                                    
send -- "\r"                                                                    
expect eof         

期待PATTERN等到PATTERN匹配。在您的情况下,找不到模式“密码:”,但会找到更宽松的模式“?assword:”。通常你的ssh客户端会以下列形式询问你:

username@host's password: