在Python中捕获SSH会话的登录输出

时间:2015-04-20 22:53:58

标签: python ssh

我正在寻找一种方法来使用Python中的子进程模块从ssh会话中捕获(并验证)用户登录输出(即位于issues.net中的MOTD)。我已经尝试了以下几种变体,但还没有找到一种方法来捕获所需的输出,而无需挂起会话或只返回传递的(即“ls -la”)命令的输出。我正在使用Python 2.6,并且只要求使用此安装中可用的本机库(Red Hat 6.5),因此pexpect等模块目前无法使用。 下面的代码只返回“ls -la”输出,而不是所需的ssh登录消息。 注意:" testUser"利用PKI,从而无需处理密码。

loginStr = ['ssh', testUser@someHost, "ls -la"]
p = subprocess.Popen(loginStr, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
while True:
    line = p.stdout.readline()
    if not line: break
print line

我也尝试了类似的结果:

loginStr = ['ssh', testUser@someHost, 'ls', '-la']
p = subprocess.Popen(loginStr, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(stdout, stderr) = p.communicate()
print stdout

队列和线程可能是一个解决方案吗?任何想法将不胜感激

1 个答案:

答案 0 :(得分:0)

你可能正在使用python expect(pexpect)

如下所示(适当地替换,托管,用户,密码):

(另外,根据shell提示符的正则表达式进行调整)

printf '%s\n' "${arr[@]}"
相关问题