paramiko模块介绍
一、介绍
Paramiko 是 Python 中用于实现 SSH 远程登录 和 SFTP 文件传输 的核心模块,简单说就是 “用 Python 代码代替手动敲 SSH 命令”, 比如远程执行服务器命令、上传 / 下载文件 核心功能: 1. SSH 远程执行命令(比如 ls、mkdir、python run.py); 2. SFTP 上传 / 下载文件(比 scp 命令更灵活); 3. 支持密钥登录(比密码登录更安全)。安装:pip install paramiko
二、功能介绍
2.1、ssh远程连接
# 导入 paramiko 模块
import paramiko
# 1. 创建 SSH 客户端对象
ssh = paramiko.SSHClient()
try:
# 2. 首次连接服务器时,SSH 会提示 “是否信任该主机”,这行代码让 Python 自动信任,不用手动确认
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 3. 连接服务器(核心参数)
ssh.connect(
hostname='你的服务器IP', # 比如 192.168.1.100
port=22, # SSH 默认端口是 22,不用改
username='服务器用户名', # 比如 root、ubuntu
password='服务器密码' # 你的服务器登录密码
)
# 4. 执行远程命令(比如查看服务器当前目录文件)
# exec_command 返回 3 个文件对象:标准输入、标准输出、标准错误
stdin, stdout, stderr = ssh.exec_command('ls -l')
如果是多条命令:
# 拼接多条命令:&& 表示前一条成功才执行后一条;; 表示不管前一条是否成功都执行
cmd = 'cd /home/ubuntu && mkdir test_dir && ls -l'
stdin, stdout, stderr = ssh.exec_command(cmd)
# 5. 读取执行结果(stdout 是正确输出,stderr 是错误输出)
# 解码:把字节转成字符串,指定编码(服务器一般是 utf-8)
result = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
# 6. 打印结果
if result:
print("命令执行成功,结果:")
print(result)
if error:
print("命令执行出错,错误信息:")
print(error)
except Exception as e:
# 捕获所有异常(比如连接失败、密码错误)
print(f"连接/执行命令失败:{e}")
finally:
# 7. 无论成功失败,最后关闭连接(避免占用资源)
ssh.close()
# 导入 paramiko 模块
import paramiko
# 1. 创建 SSH 客户端对象
ssh = paramiko.SSHClient()
try:
# 2. 首次连接服务器时,SSH 会提示 “是否信任该主机”,这行代码让 Python 自动信任,不用手动确认
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 3. 连接服务器(核心参数)
ssh.connect(
hostname='你的服务器IP', # 比如 192.168.1.100
port=22, # SSH 默认端口是 22,不用改
username='服务器用户名', # 比如 root、ubuntu
password='服务器密码' # 你的服务器登录密码
)
# 4. 执行远程命令(比如查看服务器当前目录文件)
# exec_command 返回 3 个文件对象:标准输入、标准输出、标准错误
stdin, stdout, stderr = ssh.exec_command('ls -l')
如果是多条命令:
# 拼接多条命令:&& 表示前一条成功才执行后一条;; 表示不管前一条是否成功都执行
cmd = 'cd /home/ubuntu && mkdir test_dir && ls -l'
stdin, stdout, stderr = ssh.exec_command(cmd)
# 5. 读取执行结果(stdout 是正确输出,stderr 是错误输出)
# 解码:把字节转成字符串,指定编码(服务器一般是 utf-8)
result = stdout.read().decode('utf-8')
error = stderr.read().decode('utf-8')
# 6. 打印结果
if result:
print("命令执行成功,结果:")
print(result)
if error:
print("命令执行出错,错误信息:")
print(error)
except Exception as e:
# 捕获所有异常(比如连接失败、密码错误)
print(f"连接/执行命令失败:{e}")
finally:
# 7. 无论成功失败,最后关闭连接(避免占用资源)
ssh.close()
2.2、SFTP 上传 / 下载文件
Paramiko 的 SFTP 功能可以实现 “本地 ↔ 远程服务器” 的文件传输,比 scp 命令更灵活(支持断点续传、批量传输)
# 1、上传文件,本地 -- 》服务器
import paramiko
# 1. 先建立 SSH 连接(和之前一样)
transport = paramiko.Transport()
try:
# 2. 认证登录
transport.connect(hostname='ip', port=22, username='用户名', password='密码')
# 3. 创建 SFTP 客户端对象
sftp = paramiko.SFTPClient.from_transport(transport)
# 4. 上传文件
# 参数1:本地文件路径(比如 ./test.txt)
# 参数2:服务器保存路径(比如 /home/ubuntu/test.txt)
local_path = './test.txt' # 本地当前目录的 test.txt
remote_path = '/home/ubuntu/test.txt' # 服务器保存路径
sftp.put(local_path, remote_path)
print(f"文件 {local_path} 上传到 {remote_path} 成功!")
except Exception as e:
print(f"上传失败:{e}")
finally:
# 5. 关闭连接
transport.close()
# 2、下载文件,远程服务器 -- 》本地
import paramiko
transport = paramiko.Transport()
try:
transport.connect(hostname='ip', port=22, username='用户名', password='密码')
# 下载文件:get(服务器文件路径, 本地保存路径)
remote_path = '/home/ubuntu/test.txt' # 服务器文件
local_path = './download_test.txt' # 本地保存的文件名
sftp.get(remote_path, local_path)
print(f"文件 {remote_path} 下载到 {local_path} 成功!")
except Exception as e:
print(f"下载失败:{e}")
finally:
transport.close()
三、更安全:密钥登录(替代密码)
生产环境中不建议用密码登录(容易泄露),推荐用 SSH 密钥对登录
# 1、生成 SSH 密钥对(本地),就像Linux ssh远程连接 一样
ssh-keygen -t rsa
# 2、把公钥上传到远程服务器
把 id_rsa.pub 里的内容复制到服务器的 ~/.ssh/authorized_keys 文件中
# 3、Paramiko 用密钥登录(代码示例)
import paramiko
1. 加载本地私钥
private_key = paramiko.RSAKey.from_private_key_file('/Users/你的用户名/.ssh/id_rsa')
2. 建立连接
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(
hostname='服务器IP',
port=22,
username='用户名',
pkey=private_key # 用私钥替代密码
)
# 执行命令(和之前一样)
stdin, stdout, stderr = ssh.exec_command('uname -a')
print(stdout.read().decode('utf-8'))
except Exception as e:
print(f"登录失败:{e}")
finally:
ssh.close()

浙公网安备 33010602011771号