Paramiko 是一个用 Python 语言编写的 SSHv2 协议客户端,它提供了基于 SSH 协议进行远程服务器连接和文件传输的功能。下面是 Paramiko 的一些详细使用方法:
安装
使用 pip 工具进行安装:
基本用法
连接远程服务器
1 2 3 4 5 6 7 8 9 10 11
| import paramiko
ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='server_ip', port=22, username='username', password='password')
stdin, stdout, stderr = ssh.exec_command('ls -l') print(stdout.read().decode())
ssh.close()
|
使用密钥文件连接远程服务器
1 2 3 4 5 6 7 8 9 10 11 12
| import paramiko
ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
key = paramiko.RSAKey.from_private_key_file('/path/to/key.pem') ssh.connect(hostname='server_ip', port=22, username='username', pkey=key)
stdin, stdout, stderr = ssh.exec_command('ls -l') print(stdout.read().decode())
ssh.close()
|
上传文件到远程服务器
1 2 3 4 5 6 7 8 9 10 11 12
| import paramiko
ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='server_ip', port=22, username='username', password='password')
sftp = ssh.open_sftp() sftp.put('/path/to/local/file.txt', '/path/to/remote/file.txt')
sftp.close() ssh.close()
|
从远程服务器下载文件
1 2 3 4 5 6 7 8 9 10 11 12
| import paramiko
ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='server_ip', port=22, username='username', password='password')
sftp = ssh.open_sftp() sftp.get('/path/to/remote/file.txt', '/path/to/local/file.txt')
sftp.close() ssh.close()
|
进阶用法
通过 SSH 隧道连接数据库
```python
import paramiko
import pymysql
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许自动添加新主机到本地 ~/.ssh/known_hosts 文件中
ssh.connect(hostname=’ssh_server_ip’, port=22, username=’ssh_username’, password=’ssh_password’)
建立 SSH 隧道连接数据库
transport = ssh.get_transport()
local_port = 3306
remote_addr = (‘db_server_ip’, 3306)
destination_addr = (‘localhost’, local_port)
transport.request_port_forward(*destination_addr, remote_addr)
连接本地 MySQL 数据库
conn = pymysql.connect(host=’localhost’, port=local_port, user=’mysql_username’, password=’mysql_password’, database=’mysql_db’)
执行 SQL 查询
cur = conn.cursor()
cur.execute(‘SELECT * FROM mysql.user’)
result = cur.fetchall()
print(result)
cur.close()
conn