2

我正在尝试使用 pexpect 模块 pxssh 登录到我的一台服务器。我得到密码被拒绝。我想我知道这是什么问题,但不知道如何解决它。问题是当我登录到服务器时有一个欢迎横幅(更改横幅不是一个选项)并且 pexpect 会感到困惑。这是我的代码:

import pxssh

ssh = pxssh.pxssh()
ssh.login('192.168.1.10', 'username', 'password')

我期待一个“密码:”,但 pxssh 期待 original_prompt='[#$]' 并且这些是符号,并且在横幅中是几个“。”

任何帮助,我将不胜感激。谢谢

4

2 回答 2

2

这个错误来自 ssh is lock.so 打开终端并执行该命令

xxxx@toad:~$ rm .ssh/known_hosts

删除 known_hosts

另一个选项是您在 Windows 中登录意味着检查命令提示符。如果您尝试登录 Windows 意味着使用 pexpect

child = pexpect.spawn('ssh tiger@172.16.0.190 -p 8888')
child.logfile = open("/tmp/mylog", "w")
print child.before
child.expect('.*Are you sure you want to continue connecting (yes/no)?')
child.sendline("yes")

child.expect(".*assword:")
child.sendline("tiger\r")
child.expect('Press any key to continue...')
child.send('\r')
child.expect('C:\Users\.*>')
child.sendline('dir')
child.prompt('C:\Users\.*>')

pxssh 使用 shell 提示符来同步远程主机的输出。

为了使它更健壮,它将 shell 提示设置为比 $ 或 # 更独特的东西。这应该适用于大多数 Borne/Bash 或 Csh 样式的 shell。 参考 http://www.pythonforbeginners.com/code-snippets-source-code/ssh-connection-with-python/

于 2013-04-05T10:17:52.277 回答
1

我不知道您的诊断是否正确,我认为横幅不会导致这种情况,但错误的提示肯定可以做到。查看代码以确定。 http://www.opensource.apple.com/source/lldb/lldb-69/test/pexpect-2.4/pxssh.py

特别是那部分:

 elif i==2: # password prompt again
            # For incorrect passwords, some ssh servers will
            # ask for the password again, others return 'denied' right away.
            # If we get the password prompt again then this means
            # we didn't get the password right the first time. 
            self.close()
            raise ExceptionPxssh ('password refused')

免责声明:这不是我的代码,而是Pxssh代码。为什么不直接使用paramiko ( http://www.lag.net/paramiko/ ) 或pexpect

于 2013-04-05T07:23:09.943 回答