「目录」
主要应用
SSH连接
远程命令执行
文件传输
SFTP支持
端口转发
SSH密钥管理
SSH代理
综合应用
Paramiko 是一个用于在 Python 中实现 SSH 协议的模块,它提供了一个简单而强大的接口,用于在远程服务器上执行命令、上传和下载文件等操作。以下是 Paramiko 模块的一些主要应用:
主要应用
「SSH 连接」:Paramiko 可以用于建立 SSH 连接到远程服务器,这使得您可以通过 Python 脚本执行远程命令。
「远程命令执行」:通过 Paramiko,您可以在远程服务器上执行命令,并获取输出。这对于自动化任务、监控和管理远程服务器非常有用。
「文件传输」:Paramiko 允许您在本地计算机和远程服务器之间传输文件,包括上传和下载文件。这对于备份、同步文件和部署应用程序非常方便。
「SFTP 支持」:Paramiko 提供了对 SFTP(SSH 文件传输协议)的支持,允许您通过安全的方式传输文件。
「端口转发」:Paramiko 可以用于设置端口转发,将本地端口映射到远程服务器,以便安全地访问远程服务。
「SSH 密钥管理」:Paramiko 可以帮助您管理 SSH 密钥,包括生成密钥对、添加公钥到远程服务器等操作。
「SSH 代理」:Paramiko 支持通过 SSH 代理服务器进行连接,这在某些网络环境下是非常有用的。
以下是使用 Paramiko 模块实现各种功能的示例代码:
SSH连接
import paramiko
# 创建 SSH 客户端
client = paramiko.SSHClient()
# 允许连接不在 known_hosts 文件中的主机
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接到远程主机
client.connect('hostname', username='username', password='password')
# 连接成功后可以执行其他操作
# 关闭连接
client.close()
远程命令执行
# 在SSH连接的基础上执行远程命令
stdin, stdout, stderr = client.exec_command('ls -l')
for line in stdout:
print(line.strip())
文件传输
# 使用 SFTP 进行文件传输
sftp = client.open_sftp()
sftp.put('local_file.txt', 'remote_file.txt') # 上传文件
sftp.get('remote_file.txt', 'local_file.txt') # 下载文件
sftp.close()
SFTP支持
# 使用 Paramiko 的 SFTPClient 类
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='username', password='password')
sftp = paramiko.SFTPClient.from_transport(transport)
# 在此执行 SFTP 操作
sftp.close()
transport.close()
端口转发
# 设置端口转发
client.get_transport().request_port_forward('', 12345)
SSH密钥管理
# 生成 SSH 密钥对
key = paramiko.RSAKey.generate(2048)
# 添加公钥到远程服务器
client.exec_command('echo "{}" >> ~/.ssh/authorized_keys'.format(key.get_base64()))
SSH代理
# 使用 SSH 代理
proxy = paramiko.ProxyCommand('ssh -q -W %s:%s %s' % (host, port, proxy_host))
client.connect('hostname', username='username', password='password', sock=proxy)
综合应用
建立 SSH 连接,执行远程命令,传输文件,使用 SFTP,设置端口转发,管理 SSH 密钥并通过 SSH 代理连接:
import paramiko
# SSH连接
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('hostname', username='username', password='password')
# 远程命令执行
stdin, stdout, stderr = client.exec_command('ls -l')
print("Remote command output:")
for line in stdout:
print(line.strip())
# 文件传输
sftp = client.open_sftp()
sftp.put('local_file.txt', 'remote_file.txt') # 上传文件
sftp.get('remote_file.txt', 'local_file.txt') # 下载文件
# SFTP支持
transport = paramiko.Transport(('hostname', 22))
transport.connect(username='username', password='password')
sftp = paramiko.SFTPClient.from_transport(transport)
# 端口转发
client.get_transport().request_port_forward('', 12345)
# SSH密钥管理
key = paramiko.RSAKey.generate(2048)
client.exec_command('echo "{}" >> ~/.ssh/authorized_keys'.format(key.get_base64()))
# SSH代理
proxy = paramiko.ProxyCommand('ssh -q -W %s:%s %s' % (host, port, proxy_host))
client.connect('hostname', username='username', password='password', sock=proxy)
# 关闭连接
sftp.close()
client.close()
transport.close()