gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:56 24 4
gpt4 key购买 nike

我正在尝试使用 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')

在尝试运行代码时,我遇到了一个奇怪的错误,如下所示。

Protocol error, doesn't start with scp!

不知道错误原因,也不知道SSH连接是否成功。你能帮我解决这个问题吗?

最佳答案

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

ssh user@host command

这将使用与 SSHClient.exec_command 相同的 SSH API(“exec” channel )。如果您使用的是 Windows,则可以使用 plink(来自 PuTTY 包)而不是 ssh。如果 ssh/plink 也失败,则表明您的设备不支持 SSH“exec” channel 。


在您的情况下,Brocade SSH 服务器上的“exec” channel 似乎仅支持 scp 命令。

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

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

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

另请参阅 What is the difference between exec_command and send with invoke_shell() on Paramiko?

关于 C#/SSH.NET 的类似问题:SSH.NET is not executing command on device .


强制性警告:请勿使用 AutoAddPolicy – 您正在失去针对 MITM attacks 的保护通过这样做。有关正确的解决方案,请参阅 Paramiko "Unknown Server" .

关于python - 在设备上使用 Paramiko exec_command 执行命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30603219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com