使用凭据列表批量登录和执行任务

问题描述

我有一个名为creds.txt的文本文件,其格式为。我希望能够为我的ssh服务器提供带有credentails的文本文件,并运行所有命令,以便更轻松地设置许多ssh服务器。

username:password:ip

我已经在下面运行代码

import paramiko

with open('creds.txt','r') as file:
    for line in file:
        usrname,passwd,ip = line.split(':')
        print("[!] trying " + usrname + " and " + passwd + " for " + ip)
        ssh_client = paramiko.SSHClient()
        ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy)
        ssh_client.connect(hostname=ip,username=usrname,password=passwd,port=22)
        command = "ls"
        stdin,stdout,stderr = ssh_client.exec_command(command)
        stdout = stdout.readlines()
        print (stdout)
        print("[+]connection succsessfull to " + ip + " with " + usrname + ":" + passwd)
        paramiko.agent.Agent.close

我得到了错误

Traceback (most recent call last):
  File "c:/Users/XXXX/Desktop/code projects/XXXX/XXXXXXXX.py",line 9,in <module>
    ssh_client.connect(hostname=ip,port=22)
  File "E:\python\lib\site-packages\paramiko\client.py",line 340,in connect
    to_try = list(self._families_and_addresses(hostname,port))
  File "E:\python\lib\site-packages\paramiko\client.py",line 203,in _families_and_addresses
    addrinfos = socket.getaddrinfo(
  File "E:\python\lib\socket.py",line 918,in getaddrinfo
    for res in _socket.getaddrinfo(host,port,family,type,proto,flags):
socket.gaierror: [Errno 11001] getaddrinfo Failed
PS C:\Users\Jaden\Desktop\code projects\net>

我已经在没有文本文件代码的情况下运行了此程序,它运行良好,但是当我添加文件解释功能时,它就停止了工作。

解决方法

我认为问题在于,当您分割文本时,并没有从ip变量中删除剩余的空格。

文件中的行如下所示: root:pass:127.0.0.1 \ r \ n

最后一部分是新行,所以我认为问题是您尚未删除它,因此它无法连接到ip。尝试使用strip()rstrip()函数将其删除。

ip.rstrip()