Pexpect: 无法设置 shell 提示
Pexpect: Could not set shell prompt
我从 https://pexpect.readthedocs.io/en/stable/api/pxssh.html 引用了一个 python 脚本来执行基于 ssh 密码的登录。
代码如下:
from pexpect import pxssh
import getpass
try:
s = pxssh.pxssh()
hostname = input('hostname: ')
username = input('username: ')
password = getpass.getpass('password: ')
s.login(hostname, username, password)
s.sendline('uptime') # run a command
s.prompt() # match the prompt
print(s.before) # print everything before the prompt.
s.sendline('ls -l')
s.prompt()
print(s.before)
s.sendline('df')
s.prompt()
print(s.before)
s.logout()
except pxssh.ExceptionPxssh as e:
print("pxssh failed on login.")
print(e)
当我输入 运行 代码时,它会提示输入主机名、用户名和密码。通过 CLI 提供这些输入后,ssh 登录失败,异常如下:
could not set shell prompt (received: b"unset PROMPT_COMMAND\r\nPS1='[PEXPECT]\$ '\r\nUser1@167.254.225.14's password: \r\nUser1@167.254.225.14's password: ", expected: '\[PEXPECT\][\$\#] ').
对于相同的 ssh 凭据,手动登录工作正常。
Note:
Python version: 3.6
Pexpect version: 4.7
错误是由于 login_timeout 默认为 10 秒。
在 login() 中设置高 login_timeout 解决了这个问题。
我从 https://pexpect.readthedocs.io/en/stable/api/pxssh.html 引用了一个 python 脚本来执行基于 ssh 密码的登录。 代码如下:
from pexpect import pxssh
import getpass
try:
s = pxssh.pxssh()
hostname = input('hostname: ')
username = input('username: ')
password = getpass.getpass('password: ')
s.login(hostname, username, password)
s.sendline('uptime') # run a command
s.prompt() # match the prompt
print(s.before) # print everything before the prompt.
s.sendline('ls -l')
s.prompt()
print(s.before)
s.sendline('df')
s.prompt()
print(s.before)
s.logout()
except pxssh.ExceptionPxssh as e:
print("pxssh failed on login.")
print(e)
当我输入 运行 代码时,它会提示输入主机名、用户名和密码。通过 CLI 提供这些输入后,ssh 登录失败,异常如下:
could not set shell prompt (received: b"unset PROMPT_COMMAND\r\nPS1='[PEXPECT]\$ '\r\nUser1@167.254.225.14's password: \r\nUser1@167.254.225.14's password: ", expected: '\[PEXPECT\][\$\#] ').
对于相同的 ssh 凭据,手动登录工作正常。
Note:
Python version: 3.6
Pexpect version: 4.7
错误是由于 login_timeout 默认为 10 秒。 在 login() 中设置高 login_timeout 解决了这个问题。