发布日期 :2026-09-07 08:04:07 UTC
作者 :xuzhiping
访问量: 10 次浏览
paramiko 遵循 SSH2 协议,以加密安全方式和远程服务器建立连接,两大常用能力:
1.SSH 客户端:登录远程主机,执行 shell 命令;
2.SFTP 客户端:基于 SSH 通道,实现文件上传、下载拷贝。
pip install paramiko
wget http://ftp.dlitz.net/pub/dlitz/crypto/pycrypto/pycrypto-2.6.tar.gz
wget http://www.lag.net/paramiko/download/paramiko-1.7.7.1.tar.gz
tar -zxvf pycrypto-2.6.tar.gz
cd pycrypto-2.6/
python setup.py build && python setup.py install
tar xvzf paramiko-1.7.7.1.tar.gz
cd paramiko-1.7.7.1/
python setup.py build && python setup.py install
yum install python‑paramiko -y
注意:旧版依赖 pycrypto,新版本 paramiko 底层使用 cryptography,不再需要 pycrypto。
1.paramiko.Transport((主机IP,端口)):建立 SSH 传输通道;默认 SSH 端口 22;
2.transport.connect(username=,password=):账号密码认证建立连接;
3.paramiko.SFTPClient.from_transport(transport):从已有通道创建 SFTP 客户端对象;
4.sftp.get(remote_path, local_path):下载:远程文件 → 本地文件;
5.sftp.put(local_path, remote_path):上传:本地文件 → 远程服务器;
6.transport.close():关闭传输连接。
#coding=utf-8
import paramiko
import os
def remote_scp(op_type, host_ip, remote_path, local_path, username, password):
"""
:param op_type: remoteRead=下载(远程读到本地);remoteWrite=上传(本地写到远程)
:param host_ip: 远程服务器IP
:param remote_path: 远程文件路径
:param local_path: 本地文件路径
:param username: ssh用户名
:param password: ssh密码
:return: 成功返回True,异常返回False
"""
ssh_port = 22
try:
# 创建传输通道
conn = paramiko.Transport((host_ip, ssh_port))
conn.connect(username=username, password=password)
# 获取sftp对象
sftp = paramiko.SFTPClient.from_transport(conn)
if op_type == 'remoteRead':
# 下载:远程→本地,如果本地路径为空,自动保存到/tmp目录
if not local_path:
fileName = os.path.split(remote_path)
local_path = os.path.join('/tmp', fileName[1])
sftp.get(remote_path, local_path)
if op_type == "remoteWrite":
# 上传:本地→远程
sftp.put(local_path, remote_path)
conn.close()
return True
except Exception:
return False
# 下载远程服务器 /root/test.txt 到本地 /tmp/test.txt
res = remote_scp(
op_type="remoteRead",
host_ip="192.168.1.100",
remote_path="/root/test.txt",
local_path="/tmp/test.txt",
username="root",
password="123456"
)
print("下载成功" if res else "下载失败")
# 上传本地 /tmp/log.txt 到远程服务器 /root/log.txt
res = remote_scp(
op_type="remoteWrite",
host_ip="192.168.1.100",
remote_path="/root/log.txt",
local_path="/tmp/log.txt",
username="root",
password="123456"
)
print("上传成功" if res else "上传失败")
1.SFTP 的get()、put()只支持单个文件,不能直接拷贝文件夹;拷贝目录需要手动循环遍历文件;
2.本地保存目录、远程目标目录必须提前存在,sftp 不会自动创建目录,目录缺失直接报错;
3.文件路径建议写绝对路径,相对路径容易出错;
4.传输完成必须执行conn.close()关闭连接,避免连接泄漏;
5.示例是密码登录;生产环境优先使用密钥认证,避免明文写密码;
6.原始代码只捕获全部异常,没有打印具体错误,生产建议打印异常信息方便排错。