Paramiko 安装与使用教程
Paramiko 是一个用于 Python 的 SSHv2 协议库,提供了客户端和服务器功能。以下是完整的安装与使用指南。
1. 安装 Paramiko
基本安装
pip install paramiko
可选依赖(提高性能)
pip install pycryptodome ecdsa
2. 基本使用示例
2.1 密码认证连接
import paramiko
# 创建SSH客户端实例
ssh = paramiko.SSHClient()
# 自动添加主机密钥(生产环境应考虑更安全的方式)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(
hostname='example.com',
port=22,
username='your_username',
password='your_password'
)
# 执行命令
stdin, stdout, stderr = ssh.exec_command('ls -l')
# 输出结果
print(stdout.read().decode())
# 关闭连接
ssh.close()
2.2 密钥认证连接
import paramiko
# 使用私钥文件连接
private_key = paramiko.RSAKey.from_private_key_file('/path/to/private_key')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(
hostname='example.com',
username='your_username',
pkey=private_key
)
# 执行命令示例
stdin, stdout, stderr = ssh.exec_command('df -h')
print(stdout.read().decode())
ssh.close()
3. SFTP 文件传输
import paramiko
# 建立SSH连接
transport = paramiko.Transport(('example.com', 22))
transport.connect(username='your_username', password='your_password')
# 创建SFTP客户端
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件
sftp.put('/local/path/file.txt', '/remote/path/file.txt')
# 下载文件
sftp.get('/remote/path/file.txt', '/local/path/file.txt')
# 列出目录内容
files = sftp.listdir('/remote/path')
print(files)
# 关闭连接
sftp.close()
transport.close()
4. 高级功能
4.1 交互式会话
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com', username='user', password='pass')
# 获取交互式shell
channel = ssh.invoke_shell()
channel.send('ls -l\n')
while True:
if channel.recv_ready():
output = channel.recv(1024).decode()
print(output)
else:
break
ssh.close()
4.2 端口转发
import paramiko
# 本地端口转发(将远程服务器的3306端口映射到本地的3307端口)
transport = paramiko.Transport(('example.com', 22))
transport.connect(username='user', password='pass')
# 创建端口转发
transport.request_port_forward('localhost', 3307, ('localhost', 3306))
# 现在可以通过localhost:3307访问远程服务器的3306端口
5. 安全注意事项
-
主机密钥验证:生产环境不应使用
AutoAddPolicy
,而应使用:ssh.load_system_host_keys() ssh.set_missing_host_key_policy(paramiko.RejectPolicy())
-
密码安全:不要在代码中硬编码密码,考虑使用环境变量或配置文件
-
连接超时:建议设置连接超时
ssh.connect(..., timeout=10)
-
资源清理:始终确保连接被正确关闭,可以使用
with
语句:with paramiko.SSHClient() as ssh: ssh.connect(...) # 操作代码
6. 常见问题解决
问题1:paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
解决:增加连接超时时间
ssh.connect(..., timeout=20)
问题2:paramiko.ssh_exception.NoValidConnectionsError
解决:检查主机地址和端口是否正确,确保网络可达
问题3:认证失败
解决:
- 检查用户名和密码/密钥是否正确
- 确保服务器允许该认证方式
- 对于密钥认证,确保私钥文件权限正确(通常应为600)
希望这个教程能帮助你开始使用Paramiko进行SSH操作!