如何使用 Python 的 Paramiko 模块通过 ssh 进入需要两个密码身份验证的服务器?

如何使用 Paramiko SSH 到需要双密码身份验证的服务器?

使用特定用户时,它首先提示输入用户密码,然后提示输入另一个密码,因此我的会话需要是交互式的。我已经使用 pexpect 模块ssh在 Linux上生成了一个进程,但由于我无法在 Windows 中执行此操作,因此我需要一种使用 Paramiko的方法来执行此操作。

服务器是我们的产品,是对 CentOS 稍作修改的版本。我正在编写自动化代码来测试一些需要我通过 ssh 进入服务器并验证一些命令的功能。我能够以 root 用户身份登录,但对于我感兴趣的用户,它要求输入第二个密码。

我无法执行这样的命令:

ssh -vvv -p2222 nobrk1n@10.213.23.112 ls

执行上述命令时,系统会提示我输入 nobrk1n 用户的密码。但是在输入密码时它会卡住。我已将上述命令的输出粘贴到https://pastebin.com/hSfiCmdi。通常我首先使用 ssh 进入服务器ssh -p2222 user@host,当建立连接并成功登录时,我开始执行命令。


不负相思意
浏览 184回答 1
1回答

紫衣仙女

您的服务器对第一个密码使用标准密码身份验证。只有在 shell 启动时才询问第二个密码。简单的 I/O 就是用来做这个的。此外,您的服务器似乎不支持“exec”接口/通道来执行命令(因为ssh user@host command不起作用)。什么可能与“shell 密码”功能有关。所以你可能必须使用“shell”通道来执行你的命令,否则不推荐。ssh = paramiko.SSHClient()ssh.connect(hostname, username = username, password = password1)channel = ssh.invoke_shell()channel.send(password2 + "\n")channel.send(command + "\n")while not channel.recv_ready():    time.sleep(1)out = channel.recv(9999)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python