通过 IP 地址列表执行 SSH 命令(使用 Paramiko)
Executing SSH command over list of IP addresses (using Paramiko)
第一次 post 因为我对 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()
再次强调,对此非常 陌生 - 任何帮助将不胜感激!
首先,您可以像这样更清晰地读取您的 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)
第一次 post 因为我对 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()
再次强调,对此非常 陌生 - 任何帮助将不胜感激!
首先,您可以像这样更清晰地读取您的 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)