Python 在IP地址列表上执行SSH命令(使用Paramiko)
第一次发布,因为我对Python非常陌生,但我遇到了一个需要帮助的问题-如果我的代码看起来有点初级,请原谅我 使用Paramiko,我构建了一个用于商业用途的自定义SSH客户端——最终的游戏是让它在IP地址列表(从文本文件解析)上按顺序执行给定的命令(以重新启动为例) 帕拉米科部分:Python 在IP地址列表上执行SSH命令(使用Paramiko),python,list,ssh,paramiko,text-parsing,Python,List,Ssh,Paramiko,Text Parsing,第一次发布,因为我对Python非常陌生,但我遇到了一个需要帮助的问题-如果我的代码看起来有点初级,请原谅我 使用Paramiko,我构建了一个用于商业用途的自定义SSH客户端——最终的游戏是让它在IP地址列表(从文本文件解析)上按顺序执行给定的命令(以重新启动为例) 帕拉米科部分: import paramiko import sys import os import time port = 22 def ssh_comm(ip, user, password, cmd): tr
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()
再次,这是非常新的-任何帮助将不胜感激 首先,您可以更清晰地读取IP地址文件,如下所示:
with open(iplist) as fp:
ips = [line.strip() for line in fp]
然后我认为您需要做的就是将该块放入cmd\u loop\u ssh
,在while
循环之前,然后替换
ssh_comm(ip, user, password, cmd)
与
您可能还想添加一个退出命令:
cmd = input('Command: ')
if cmd == 'quit':
break
else:
for ip in ips:
ssh_comm(ip, user, password, cmd)
这是可行的,但它不会按顺序选择IP地址。它只是从文本文件中随机选取地址。在文本文件中的3个地址中,有2个地址在它们之间跳转,从未尝试第3个。啊,我误解了你的要求:如果第一个IP失败,你只想继续第二个IP?不,我想我不明白你在追求什么。我建议您添加更多日志记录(只是简单的打印语句)。for循环肯定只会按照它们在文件中存在的顺序遍历这些行。其中一行肯定是由于某种原因失败的,我没有收到反馈-谢谢,我会进一步调查,并在有更多信息时返回。
cmd = input('Command: ')
if cmd == 'quit':
break
else:
for ip in ips:
ssh_comm(ip, user, password, cmd)