Python中利用pxssh()库实现多线程SSH批量操作远程服务器
发布时间:2023-12-25 06:23:16
在Python中,可以使用pxssh库实现多线程SSH批量操作远程服务器。pxssh是pexpect模块的一个封装,用于实现SSH连接。它提供了对SSH会话的高级控制和自动化功能。
下面是一个使用pxssh库进行SSH批量操作远程服务器的示例代码:
import pxssh
import threading
def ssh_command(hostname, username, password, command):
try:
# 创建一个SSH会话对象
session = pxssh.pxssh()
# 登录远程服务器
session.login(hostname, username, password)
# 发送要执行的命令
session.sendline(command)
# 等待命令执行完成
session.prompt()
# 打印命令结果
print(f"Command output on {hostname}:
{session.before.decode()}")
# 关闭SSH会话
session.logout()
except pxssh.ExceptionPxssh as e:
print(f"SSH error on {hostname}: {str(e)}")
# 服务器列表
servers = [
{"hostname": "server1", "username": "user1", "password": "password1"},
{"hostname": "server2", "username": "user2", "password": "password2"},
# 可以添加更多服务器
]
# 要执行的命令
command = "ls -l /"
# 创建一个线程列表
threads = []
# 遍历服务器列表,为每台服务器创建一个线程
for server in servers:
thread = threading.Thread(target=ssh_command, args=(server["hostname"], server["username"], server["password"], command))
threads.append(thread)
thread.start()
# 等待所有线程执行完成
for thread in threads:
thread.join()
在上述示例中,我们首先定义了一个ssh_command函数,该函数接受远程服务器的主机名、用户名、密码和要执行的命令作为参数。在函数内部,我们使用pxssh库创建一个SSH会话对象,并使用提供的用户名和密码登录到远程服务器。然后,我们使用sendline方法发送要执行的命令到远程服务器,使用prompt方法等待命令执行完成,并使用before属性获取命令执行结果。最后,我们打印命令结果,并调用logout方法关闭SSH会话。
然后,我们定义了一个服务器列表,包含要连接的远程服务器的主机名、用户名和密码。接下来,我们定义了要执行的命令。然后,我们创建一个空的线程列表,并遍历服务器列表。对于每个服务器,我们使用threading.Thread类创建一个线程,并将ssh_command函数作为目标函数传递给线程。我们将线程添加到线程列表,并启动线程。
最后,我们使用join方法等待所有线程执行完成。
通过以上代码,我们可以同时连接多台远程服务器,并执行相同的命令。这种方式可以提高操作远程服务器的效率,特别适用于批量操作的场景。
