使用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库。
希望上述示例对你有所帮助!
