我正在尝试使用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连接是否成功。你能帮我这个忙吗?
如果SSHClient.exec_command不工作时,首先认为测试是尝试(上 一个 行):
SSHClient.exec_command
ssh user@host command
它将使用与相同的SSH API(“ exec”通道)SSHClient.exec_command。如果您使用的是Windows,则可以使用plink(从PuTTY软件包中)代替ssh。如果ssh/也plink失败,则表明您的设备不支持SSH“ exec”通道。
plink
ssh
对于您的情况,看来Brocade SSH服务器上的“ exec”通道已实现为scp仅支持该命令。
scp
正如您声称能够“ SSH”到交换机一样,似乎“ shell”通道已完全正常工作。
虽然通常不建议使用“ shell”通道进行命令自动化,但是对于服务器,您将没有其他选择。使用,SSHClient.invoke_shell然后使用将命令写入通道(=写入外壳)Channel.send。
SSHClient.invoke_shell
Channel.send
channel = ssh.invoke_shell() channel.send('ls\n') channel.send('exit\n')