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

使用Python的SCPClient()在远程服务器上执行命令并获取结果

发布时间:2023-12-24 01:04:24

要在远程服务器上执行命令并获取结果,可以使用paramiko库中的SCPClient()类。这个类可以用来在远程服务器上复制文件和目录,同时也可以在服务器上执行命令,并获取执行结果。

以下是一个使用Python的SCPClient()类在远程服务器上执行命令并获取结果的示例:

import paramiko
from paramiko import SSHClient
from paramiko import SCPClient


def execute_command(hostname, username, password, command):
    # 创建SSH客户端
    ssh = SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    try:
        # 连接到远程服务器
        ssh.connect(hostname, username=username, password=password)

        # 创建SCP客户端
        scp = SCPClient(ssh.get_transport())

        # 在远程服务器上执行命令
        stdin, stdout, stderr = ssh.exec_command(command)

        # 获取执行结果
        output = stdout.read().decode('utf-8')

        # 打印执行结果
        print(output)

    except paramiko.AuthenticationException:
        print(f'Authentication failed when connecting to {hostname}')

    except paramiko.SSHException as e:
        print(f'Unable to establish SSH connection to {hostname}: {e}')

    finally:
        # 关闭SCP和SSH连接
        scp.close()
        ssh.close()


# 示例用法
hostname = 'example.com'
username = 'your_username'
password = 'your_password'
command = 'ls -l'

execute_command(hostname, username, password, command)

在这个示例中,我们首先导入了paramiko库中的一些必要模块(SSHClient和SCPClient)。然后,我们定义了一个名称为execute_command的函数,它接受远程服务器的主机名、用户名、密码以及要执行的命令作为参数。

在函数内部,我们首先创建了一个SSH客户端对象,并设置了必要的主机密钥策略。然后,我们通过connect()方法连接到远程服务器。

接下来,我们创建了一个SCP客户端对象,该对象将用于执行SCP操作。然后,我们使用exec_command()方法在远程服务器上执行了给定的命令。

最后,我们将执行结果从stdout读取,并使用decode('utf-8')将其转换为可读的字符串。然后,我们将结果打印出来。

在执行命令后,我们关闭了SCP和SSH连接。

要使用这个示例,只需将示例中的主机名、用户名、密码和命令替换为你自己的信息即可。

请注意,在使用SCPClient执行命令之前,我们创建了一个SSH连接。这是因为SCPClient类依赖于SSH连接来执行命令或传输文件。

此外,还需要安装paramiko库,可以使用pip进行安装。在使用示例之前,请确保已经安装了paramiko库。

希望上述示例对你有所帮助!