如何通过 pexpect spawn 命令 运行 检查 ssh 命令 运行 是否成功。

how to check if ssh command ran through pexpect spawn command ran successfully or not .

我正在编写一个简单的 python 脚本来测试与多个 linux 主机 运行 centos 的连接。为此,我正在考虑使用 pexpect 模块和 ssh 。 pexpect 将在提示时发送存储在变量中的密码。问题是如何检查密码是否被成功接受。有没有办法这样做。代码如下。请加专家意见。

此示例已将代码写入本地主机的 ssh only.So 尚未包含 for 循环。

import pexpect
from getpass import getpass
import sys

# Defining Global Variables

log_file = '/tmp/AccessValidation'

# Getting password from user and storing in a variable 

passs = getpass("Please enter your password: ")

# Connect to server using ssh connection and run a command to verify access.

child = pexpect.spawn("ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 127.0.0.1 'uptime'")
child.expect('Password:')
child.sendline(passs)

您可以做的一件事是为命令提示符设置 expect。所以如果你的提示是:someuser@host$ 你可以做 child.expect(".*$").

你可以做的另一件事是有多个期望,然后将它们与你想要的进行核对。例如:

i = child.expect([".*$", "Password Incorrect"])
if i != 0:
    print "Incorrect credentials"
else:
    print "Command executed correctly"

您可以查看一些专门用于处理 ssh 连接的 examples within Pexpect's readthedocs page. Pexpect also has the pxssh class 并且可能也有一些用处。我个人没有使用过它,但语法似乎是一样的,只是有更多与 ssh 相关的选项。

感谢 Cory Shay 帮助我找出解决问题的正确方法。下面是我编写的代码,可以正常工作。

import pexpect
from getpass import getpass
import sys

# Defining Global Variables

log_file = '/tmp/AccessValidation'

# Getting password from user and storing in a variable 

passs = getpass("Please enter your password: ")

# Connect to server using ssh connection and run a command to verify access.

child = pexpect.spawn("ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no 127.0.0.1 'hostname' ")
child.expect('Password:')
child.sendline(passs)

result = child.expect(['Password:', pexpect.EOF])
if result == 0:
    print "Access Denied"
elif result == 1:
    print "Access Granted"