一尘不染

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

python

我正在尝试使用Paramiko将SSH 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连接是否成功。你能帮我这个忙吗?


阅读 180

收藏
2020-12-20

共1个答案

一尘不染

如果SSHClient.exec_command不工作时,首先认为测试是尝试(上
一个 行):

ssh user@host command

它将使用与相同的SSH API(“
exec”通道)SSHClient.exec_command。如果您使用的是Windows,则可以使用plink(从PuTTY软件包中)代替ssh。如果ssh/也plink失败,则表明您的设备不支持SSH“
exec”通道。


对于您的情况,看来Brocade SSH服务器上的“ exec”通道已实现为scp仅支持该命令。

正如您声称能够“ SSH”到交换机一样,似乎“ shell”通道已完全正常工作。

虽然通常不建议使用“
shell”通道进行命令自动化,但是对于服务器,您将没有其他选择。使用,SSHClient.invoke_shell然后使用将命令写入通道(=写入外壳)Channel.send

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

2020-12-20