有没有办法使用 Python 检查远程 Unix 服务器上的特定命令提示符。 我需要能够通过 SSH 连接到一系列远程 Unix 服务器,检查是否收到“INPUT NAME:”提示,然后注销。 我不需要在提示时输入任何内容,只需确保收到即可。 我不知道如何去做,而且我尝试过的每一个搜索词组合都只是让我如何从用户那里获取输入(我已经知道该怎么做)。 我的伪代码如下所示:
Iterate through server list
SSH log in to Unix server
Did you get an "INPUT NAME:" prompt after login?
True: Mark Server good
False: Mark Server bad
Close connection
Next server
需要澄清的是,“INPUT NAME:”提示是专有 shell 的一部分,具有特定组的用户在登录时会被分配,而不是像 bash 或 ksh 这样的东西。 我将要做的是为此目的创建一个包含该组的 ID 作为测试 ID。
这里有一个建议:使用
pexpect.pxssh
。首先,使用 venv
或其他工具创建一个 Python virtualenv。然后安装pexpect
:
pip install pexpect
这里是连接到单个服务器的示例代码。您可以添加一个循环,以便它可以与多个服务器一起使用:
import pexpect.pxssh
# Start a ssh session
server_name = "ubuntu"
user_name = "root"
ssh = pexpect.pxssh.pxssh(encoding="utf-8")
ssh.login(server=server_name, username=user_name)
# Check for the prompt
# The .before attribute holds text before the next interaction
print(f"{ssh.before=}")
is_good = "INPUT NAME:" in ssh.before
print(f"{is_good=}")
ssh.logout()
这是一个示例输出:
ssh.before=" unset PROMPT_COMMAND\r\n\x1b]0;root@localhost: ~\x07root@localhost:~# PS1='[PEXPECT]\\$ '\r\n"
is_good=False
注释
.login()
功能