paramiko
是一个 Python 模块,用于实现 SSH 协议,并提供了一个强大的接口来执行远程命令、管理远程文件等操作。它是一个非常流行的用于自动化和脚本化远程服务器管理的工具。
类/方法/属性 | 描述 |
---|---|
paramiko.SSHClient |
用于建立 SSH 连接的类,提供执行命令和传输文件的方法。 |
paramiko.Transport |
底层传输类,用于建立 SSH 连接。 |
paramiko.SFTPClient |
用于通过 SSH 进行文件传输的类。 |
paramiko.AutoAddPolicy |
SSH 服务器主机密钥策略,用于自动添加未知的主机密钥到本地主机密钥存储中。 |
paramiko.client.connect() |
SSHClient 类的静态方法,用于建立 SSH 连接。 |
paramiko.client.exec_command() |
SSHClient 类的方法,用于在远程服务器上执行命令。 |
paramiko.client.open_sftp() |
SSHClient 类的方法,用于打开 SFTP 会话。 |
paramiko.client.load_system_host_keys() |
SSHClient 类的方法,用于加载系统主机密钥。 |
paramiko.client.set_missing_host_key_policy() |
SSHClient 类的方法,用于设置缺失主机密钥策略。 |
paramiko.client.close() |
SSHClient 类的方法,用于关闭 SSH 连接。 |
paramiko.sftp.SFTPClient.put() |
SFTPClient 类的方法,用于将文件上传到远程服务器。 |
paramiko.sftp.SFTPClient.get() |
SFTPClient 类的方法,用于从远程服务器下载文件。 |
paramiko.sftp.SFTPClient.listdir() |
SFTPClient 类的方法,用于列出远程目录的内容。 |
paramiko.sftp.SFTPClient.mkdir() |
SFTPClient 类的方法,用于在远程服务器上创建目录。 |
paramiko.sftp.SFTPClient.remove() |
SFTPClient 类的方法,用于删除远程服务器上的文件。 |
paramiko.sftp.SFTPClient.rename() |
SFTPClient 类的方法,用于重命名远程服务器上的文件或目录。 |
封装 Transport
示例
以下是封装 paramiko.Transport
类的示例代码,用于管理 SSH 连接、执行远程命令和进行文件传输:
python
import paramiko
from paramiko import Transport, SFTPClient
class SSHTransport:
def __init__(self, hostname, port=22, username=None, password=None, pkey=None):
self.hostname = hostname
self.port = port
self.username = username
self.password = password
self.pkey = pkey
self.transport = None
def connect(self):
self.transport = Transport((self.hostname, self.port))
self.transport.connect(username=self.username, password=self.password, pkey=self.pkey)
def execute_command(self, command):
if self.transport is None or not self.transport.is_active():
raise Exception("Transport is not connected")
session = self.transport.open_session()
session.exec_command(command)
stdout = session.makefile('r', -1)
stderr = session.makefile_stderr('r', -1)
return stdout.read(), stderr.read()
def upload_file(self, local_path, remote_path):
if self.transport is None or not self.transport.is_active():
raise Exception("Transport is not connected")
sftp = SFTPClient.from_transport(self.transport)
sftp.put(local_path, remote_path)
sftp.close()
def download_file(self, remote_path, local_path):
if self.transport is None or not self.transport.is_active():
raise Exception("Transport is not connected")
sftp = SFTPClient.from_transport(self.transport)
sftp.get(remote_path, local_path)
sftp.close()
def close(self):
if self.transport is not None:
self.transport.close()
# 使用示例
ssh_transport = SSHTransport('192.168.226.26', username='root', password='lzz2578+')
ssh_transport.connect()
# 执行远程命令
stdout, stderr = ssh_transport.execute_command('ls -l')
print('STDOUT:', stdout.decode('utf-8'))
print('STDERR:', stderr.decode('utf-8'))
# 上传文件
ssh_transport.upload_file('log.txt', 'log.txt')
# 下载文件
ssh_transport.download_file('log.txt', 'log.txt')
# 关闭连接
ssh_transport.close()
说明
connect
: 建立 SSH 连接。execute_command
: 执行远程命令并返回标准输出和标准错误。upload_file
: 上传本地文件到远程服务器。download_file
: 从远程服务器下载文件到本地。close
: 关闭 SSH 连接。