欢迎访问宙启技术站
智能推送

Python自动化运维利器:使用pexpect.pxssh实现远程服务器批量操作

发布时间:2023-12-26 06:54:08

在运维工作中,经常需要对多台远程服务器进行批量操作,比如同时登录多台服务器修改配置、执行命令等。Python是一种非常强大的编程语言,它提供了许多用于自动化运维的工具和库。其中一个非常好用的库就是pexpect.pxssh,它可以实现对远程服务器的登录、执行命令等操作。

pexpect.pxssh是基于pexpect库开发的,它为SSH协议提供了一种简化的接口。使用pexpect.pxssh可以很方便地实现远程服务器的登录、执行命令、上传文件等操作。

下面我们通过一个例子来演示如何使用pexpect.pxssh实现远程服务器的批量操作。

首先,需要安装pexpect库。可以使用pip命令进行安装:

pip install pexpect

接下来,我们创建一个Python脚本,命名为remote_operations.py。在脚本中,我们将使用pexpect.pxssh来实现远程服务器的登录和执行命令。

import pexpect

# 创建一个远程服务器操作类
class RemoteServer:
    def __init__(self, ip, username, password):
        self.ip = ip
        self.username = username
        self.password = password
        self.session = None

    # 登录远程服务器
    def login(self):
        try:
            self.session = pexpect.pxssh.pxssh()
            self.session.login(self.ip, self.username, self.password)
            print(f"登录 {self.ip} 成功")
        except Exception as e:
            print(f"登录 {self.ip} 失败: {str(e)}")

    # 执行命令
    def execute_command(self, command):
        try:
            self.session.sendline(command)
            self.session.prompt()
            output = self.session.before.decode()
            print(f"{self.ip} 执行命令: {command}")
            print(output)
        except Exception as e:
            print(f"{self.ip} 执行命令失败: {str(e)}")

    # 退出登录
    def logout(self):
        if self.session is not None:
            self.session.logout()
            print(f"退出登录 {self.ip}")


# 创建远程服务器对象并执行操作
def main():
    # 创建远程服务器对象列表
    servers = [
        RemoteServer("192.168.1.101", "root", "password1"),
        RemoteServer("192.168.1.102", "root", "password2"),
        RemoteServer("192.168.1.103", "root", "password3")
    ]

    # 登录远程服务器
    for server in servers:
        server.login()

    # 执行命令
    for server in servers:
        server.execute_command("ls /")

    # 退出登录
    for server in servers:
        server.logout()


# 执行主函数
if __name__ == '__main__':
    main()

在上面的代码中,我们首先定义了一个RemoteServer类,该类表示一个远程服务器。它包含了服务器的IP地址、用户名和密码,在初始化时进行赋值。该类提供了login()execute_command()logout()等方法,分别用于登录服务器、执行命令和退出登录。

main()函数中,我们创建了三个RemoteServer对象,分别代表三台远程服务器。然后依次登录服务器、执行命令和退出登录。

执行脚本后,我们可以看到打印出了登录成功、执行命令和退出登录的信息,以及执行命令的输出结果。

使用pexpect.pxssh可以方便地实现对远程服务器的批量操作,包括登录、执行命令等。它减少了手动登录服务器的操作,提高了运维工作的效率。只需要编写少量的代码,就可以实现对多台服务器的自动化操作。同时,pexpect.pxssh还提供了一些其他功能,如上传文件等,可根据实际需求进行开发和使用。