使用Python paramiko模块利用多线程来实现SSH并发执行操作可以提高系统操作效率,尤其是对于需要抓取并处理大量数据的网络和系统管理员而言,这个方法是非常受欢迎的。
下面是使用Python paramiko模块进行SSH并发执行操作的步骤:
-
安装paramiko模块:
在命令行中运行pip install paramiko 命令即可。 -
导入libraries
导入需要用到的库文件
#!/usr/bin/python
import paramiko
import threading
import time
import re
import sys
注释:paramiko用于连接ssh
- 创建SSH连接:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port, username, password)
stdin, stdout, stderr = ssh.exec_command(cmd)
注释:使用ssh.connect() 函数来连接SSH,其中ip是远程主机名,port是SSH端口号,username与password是登录SSH的用户名和密码。
STDIN, STDOUT, STDERR 执行该指令之后的输出结果。
- 定义线程函数:
def execute(ip, command):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port=22, username=username, password=password, timeout=5)
stdin, stdout, stderr = ssh.exec_command(command, timeout=10)
try:
print(stdout.read())
except:
return 2
ssh.close()
注释:这段代码定义了一个execute函数,我们可以将其作为一个线程来运行。其中参数ip是服务器IP,command是将要执行的命令。
- 创建线程池:
threads = []
for ip in ips:
t = threading.Thread(target=execute, args=(ip, command))
threads.append(t)
for thread in threads:
thread.start()
for thread in threads:
thread.join()
注释:这段代码中的threads是一个空列表,它用来装线程。在for循环中,我们创建了多个线程,并将它们追加到线程池中。thread.start()函数将该线程启动,thread.join()函数会让主线程等待该线程结束。
这就是使用Python paramiko模块进行ssh并发执行操作的全部步骤。
下面我来提供2个示例:
1.执行一个打印命令
def execute(ip, command):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port=22, username=username, password=password, timeout=5)
stdin, stdout, stderr = ssh.exec_command(command, timeout=10)
try:
print(stdout.read())
except:
return 2
ssh.close()
ips = ['192.168.1.100', '192.168.1.101']
command = 'echo "hello world"'
threads = []
for ip in ips:
t = threading.Thread(target=execute, args=(ip, command))
threads.append(t)
for thread in threads:
thread.start()
for thread in threads:
thread.join()
- 在远程服务器上创建一个文件夹
def execute(ip, command):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, port=22, username=username, password=password, timeout=5)
stdin, stdout, stderr = ssh.exec_command(command, timeout=10)
try:
print(stdout.read())
except:
return 2
ssh.close()
ips = ['192.168.1.100', '192.168.1.101']
command = 'mkdir testdir'
threads = []
for ip in ips:
t = threading.Thread(target=execute, args=(ip, command))
threads.append(t)
for thread in threads:
thread.start()
for thread in threads:
thread.join()
这2个示例都是在多个服务器上执行SSH命令的,只需要在ips列表中添加需要连接的主机IP地址即可。
以上是使用Python paramiko模块利用多线程实现SSH并发执行操作的攻略和2个示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python paramiko模块利用多线程实现ssh并发执行操作 - Python技术站