python 手动输入密钥有效,但通过paramiko invoke_shell.sendall发送时无效

yzuktlbb  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(207)

我正在寻找一种通过SSH登录到Cisco UCS服务器并执行几个命令的方法。
我可以登录并执行几个命令,并得到输出。但一个命令,需要y和回车键似乎不工作。
如果我通过终端手动尝试相同的操作,它会工作。看起来无论使用\n\r\r\n,回车键都没有在服务器上执行。

ssh = paramiko.client.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=username, password=password)
ucs = ssh.invoke_shell()
ucs.sendall('scope chassis\r\n')
time.sleep(2)
ucs.sendall('power on\r\n')
time.sleep(2)
ucs.sendall("y\r\n")
time.sleep(10)
ucs.sendall('show\r\n')
time.sleep(10)
s = ucs.recv(4096)
with open("Output.txt", "ab") as text_file:
    text_file.write(s)
with open("temp2", "wb") as text_file:
    text_file.write(s)
ssh.close()
hostname# scope chassis
hostname /chassis #
hostname /chassis # power on
This operation will change the server's power state.
Do you want to continue?[y|N]y

hostname /chassis #
hostname /chassis # show
Power Serial Number Product Name  PID           UUID
----- ------------- ------------- ------------- ------------------------------------
off   xxxxxxxxxxx   UCS C240 M3S  UCSC-C240-M3S xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
cbwuti44

cbwuti441#

我将查看以下命令:

ucs.sendall('power on\r\n')

可能是因为您同时使用\r\n,所以控制台将\r解释为接受power on命令,将\n解释为立即取消它。因此,在您有机会输入Y之前,该命令已经被前面的\n取消了。

相关问题