在IP地址列表上执行SSH命令(使用Paramiko)

时间:2018-01-23 15:54:51

标签: python list ssh paramiko text-parsing

我第一次发帖,因为我对Python非常陌生,但我遇到了一个我需要帮助的问题 - 请原谅我,如果我的代码看起来有点简陋。

使用Paramiko,我已经构建了一个用于商业用途的自定义SSH客户端 - 最终游戏是让它在IP地址列表(从文本文件解析)中执行给定命令(作为示例重新启动)序列。

对于Paramiko部分:

import paramiko
import sys
import os
import time

port = 22

def ssh_comm(ip, user, password, cmd):
     try:
        client = paramiko.SSHClient()
        client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        client.connect(ip, username='username', password='password')
        ssh_session = client.get_transport().open_session()
        if ssh_session.active:
           ssh_session.exec_command(cmd),
           buffer = (ssh_session.recv(4096)).decode("utf-8")
           print (buffer)
     except paramiko.AuthenticationException:
        ssh_comm2(ip, user, password, cmd) **#TRIES NEXT SET OF CREDENTIALS**

def cmd_loop_ssh():
        while True:
                cmd = input('Command: ')
                ssh_comm(ip, user, password, cmd)

ip = input('IP: ')
cmd_loop_ssh()

这适用于在一台机器上执行命令,但我需要它执行多个 - 我可以从格式化的文本文件解析我需要的IP,如下所示:

iplist = '\IP TEXT FILE LOCATION.txt\'
    with open(iplist, 'r') as fp:
        line = fp.readline()
        while line:
            print ('{}'.format(line.strip()))
            line = fp.readline()

再次,非常这个新的 - 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

首先,你可以更清楚地读取你的IP地址文件:

with open(iplist) as fp:
    ips = [line.strip() for line in fp]

然后我认为您需要做的就是在cmd_loop_ssh循环之前将该块放入while,然后替换

ssh_comm(ip, user, password, cmd)

for ip in ips:
    ssh_comm(ip, user, password, cmd)

您可能还想添加一个退出命令:

cmd = input('Command: ')
if cmd == 'quit':
    break
else:
    for ip in ips:
        ssh_comm(ip, user, password, cmd)