为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2021-09-14 15:17:46
如何使用 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,当建立连接并成功登录时,我开始执行命令。
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

您的服务器对第一个密码使用标准密码身份验证。


只有在 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)


查看完整回答
反对 回复 2021-09-14
  • 1 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信