python 在设备上使用Paramiko exec_command执行命令不起作用

rvpgvaaj  于 2023-08-02  发布在  Python
关注(0)|答案(1)|浏览(215)

我正在尝试使用Paramiko通过SSH连接到Brocade交换机并执行远程命令。代码如下:

def ssh_connector(ip, userName, passWord, command):
 ssh = paramiko.SSHClient()
 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
 ssh.connect(ip, username=userName, password=passWord, port=22)
 stdin, stdout, stderr = ssh.exec_command(command)
 print stdout.readlines()

ssh_connector(ip, userName, passWord, 'show running-config')

字符串
在尝试运行代码时,我遇到了一个奇怪的错误,如下所示。
协议错误,不以scp开头!
我不知道错误的原因或SSH连接是否成功。你能帮我一下吗?

uujelgoq

uujelgoq1#

如果SSHClient.exec_command不起作用,首先要测试的是尝试(在 * 一 * 行上):

ssh user@host command

字符串
这将使用与SSHClient.exec_command相同的SSH API(“exec”通道)。如果您使用的是Windows,则可以使用plink(来自PuTTY包)而不是ssh。如果ssh/plink也失败,则表示您的设备不支持SSH“exec”通道。
在您的示例中,Brocade SSH服务器上的“exec”通道似乎只支持scp命令。
正如您声称能够“SSH”到交换机,似乎“shell”通道完全工作。
虽然通常不建议使用“shell”通道进行命令自动化,但对于您的服务器,您没有其他选择。使用SSHClient.invoke_shell并使用Channel.send将命令写入通道(= shell)。

channel = ssh.invoke_shell()
channel.send('ls\n')
channel.send('exit\n')

相关问题