我正在准备一个代码,以使用ssh和Paramiko访问远程服务器,并运行一些命令并查看stdout的输出。
我已经在Ubuntu服务器上测试了代码,并且可以正常工作,但是当我在另一台服务器(这是Windows服务器和电信机的接口)上测试代码时,不会读取stdout,
(“在远程服务器上成功执行的命令” )已打印,但以下内容(“已读取行” )
没有打印出来,所以我得出结论,代码挂在stdout=stdout.readlines()
上
代码复制到下面,请您帮我弄清楚导致此失败的原因是什么?
我还要补充一点,如果我使用PuTTY在该服务器上执行命令,则会得到正确的输出。
import paramiko
import os
user_name = "****"
passwd = "******"
ip = "*.*.*.*"
print ("Please wait creating ssh client ...")
ssh_client = paramiko.SSHClient() #Create sshclient instance
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
print ("Please wait, connecting to remote server")
ssh_client.connect(hostname=ip,username=user_name,password=passwd)
cmd="mml \n command2"
print ("Please wait, executing command on remote server")
stdin,stdout,stderr=ssh_client.exec_command(cmd)
print ("Successfully executed command on remote server")
stdout=stdout.readlines()
print ("lines are read")
stdout="".join(stdout)
ssh_client.close()
print ("Connection closed")
print (stdout)
os.system("pause")
答案 0 :(得分:0)
您正在执行的命令是交互式的。启动后,它将等待子命令。在执行它时,等待命令完成(通过调用readlines
)。永远不会发生。
您必须将子命令提供给命令才能使其执行某些操作。
参见Pass input/variables to command/script over SSH using Python Paramiko。
您还必须退出命令(通过发送诸如exit
/ quit
/ bye
之类的子命令)。