使用ssh远程执行命令Python

时间:2017-09-10 14:05:04

标签: python ssh paramiko

我是python的新手,我无法解决我的代码无效的原因。 我正在尝试通过ssh(使用paramiko)通过主机名列表连接到多个服务器。

奇怪的事情发生了,代码只有在文件中有一个主机名才有效,如果它有多个主机名,它就不起作用。 只是为了清楚循环工作正常。

希望你能提前帮助我!

代码:

import sys
import os
import paramiko

client=paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

username='yadayada'
password='ladida'
ipFile=open("C:\Users\garmiza\Documents\Scripts\TrapToHpsimLinuxIPList.txt","r")


for line in iter(ipFile):
   print "sending trap from " + line
   client.connect(line,username=username,password=password)
   command="snmptrap -v 1 -c public 16.19.203.96 enterprises.232 {clientIP} 6 11003 0".format(clientIP=line)
   stdin, stdout, stderr = client.exec_command(command)


ipFile.close()

错误:

  File "C:/Users/zaza/PycharmProjects/linuxTrapSending/linuxTrapSending.py", line 16, in <module>

    client.connect(line,username=username,password=password)
  File "C:\Python27\lib\site-packages\paramiko\client.py", line 301, in connect
    to_try = list(self._families_and_addresses(hostname, port))
  File "C:\Python27\lib\site-packages\paramiko\client.py", line 199, in _families_and_addresses
    hostname, port, socket.AF_UNSPEC, socket.SOCK_STREAM)
socket.gaierror: [Errno 11001] getaddrinfo failed

Process finished with exit code 1

2 个答案:

答案 0 :(得分:0)

根据MSDN文档:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms738520(v=vs.85).aspx

  

getaddrinfo函数提供从ANSI主机名到地址的协议无关转换。

错误代码11001:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx#WSAHOST_NOT_FOUND

  

找不到主机。   没有这样的主人是已知的。该名称不是正式的主机名或别名,或者在查询的数据库中找不到该名称。协议和服务查询也可能会返回此错误,这意味着在相关数据库中找不到指定的名称。

您必须传递错误的主机名(或者只是一个不存在的主机)。

答案 1 :(得分:0)

好的,我解决了。问题是列表中的值被重命名为:hostname \ n导致错误的原因以及它在文件中使用一个主机名的原因。