我使用一个简单的pexpect脚本ssh到一台远程机器,并获取一个命令返回的值。有没有什么方法,pexpect或sshwise,我可以忽略unix问候?也就是说,从
child = pexpect.spawn('/usr/bin/ssh %s@%s' % (rem_user, host))
child.expect('[pP]assword: ', timeout=5)
child.sendline(spass)
child.expect([pexpect.TIMEOUT, prompt])
child.before = '0'
child.sendline ('%s' % cmd2exec)
child.expect([pexpect.EOF, prompt])
# Collected data processing
result = child.before
# logon to the machine returns a lot of garbage, the returned executed command is at the 57th position
print result.split('\r\n') [57]
result = result.split('\r\n') [57]我如何才能简单地获得返回值,忽略“上次成功登录”和“(C)版权”之类的东西,而不必关心值的正确位置?
谢谢!
发布于 2010-09-22 03:01:59
如果您有权访问要登录的服务器,则可以尝试在主目录中创建一个名为.hushlogin的文件。这个文件的存在会使标准的MOTD问候语和类似的东西静默。
或者,尝试使用ssh -T,它将完全禁用终端分配;您不会得到shell提示,但仍然可以发出命令并读取响应。
在ServerFault上也有一个类似的线程,它可能会对你有所帮助。
发布于 2010-09-22 03:00:41
如果该命令不是交互式的,那么您可以直接运行ssh HOST COMMAND来运行该命令,而无需进行任何登录操作。如果该命令是交互式的,那么您可以经常使用ssh选项(ssh -t HOST COMMAND)来强制执行伪-t分配,并欺骗远程进程,使其认为它正在连接到一个TTY。
发布于 2010-09-22 03:13:22
我已经使用paramiko自动化了ssh连接,我发现它很有用。它可以处理问候和静默执行。
https://stackoverflow.com/questions/3763334
复制相似问题