cmd/python命令行密钥上传SFTP,实现自动化上传

有时候我们会用到用密钥连接SFTP进行文件上传下载移出等操作(比如PS5提交包就需要用到)。而命令行的操作能够集成到生产环境,实现流程自动化,本文简述密钥连接SFTP的方法,实现自动化的上传

文章目录

cmd

sftp连接指令:

复制代码
sftp -i ~/.ssh/id_rsa username@hostname

注意windows下会要求你的密钥不能存在任意用户都可以访问的目录下 。如果报了这个错误,可以把密钥放在C:\Users\[yourName]\.ssh下面。

python

上述cmd脚本能正确连接到服务器,连接后可以输入指令(如put localFilePath remoteDir进行文件的上传),但需要先输入连接指令,等待几秒钟出现sftp>提示符后才能开始进一步操作。这种方式无法集成到生产环境的自动化脚本中。

那我们来研究一下python吧!

python使用sftp需要用到paramiko库

密码连接

使用方式:

python 复制代码
transport = paramiko.Transport((hostname, port))
transport.connect(username=username, password=password)

完整代码:

python 复制代码
import paramiko

# 建立SFTP连接
hostname = '远程服务器地址'
port = 22
username = '用户名'
password = '密码'

transport = paramiko.Transport((hostname, port))
transport.connect(username=username, password=password)
sftp = transport.open_sftp()

# 在此处执行SFTP操作,例如上传、下载、删除文件等

# 关闭SFTP连接
sftp.close()
transport.close()

密钥文件连接

python 复制代码
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(host_name, username=user_name, key_filename=private_key_path)

完整代码:

python 复制代码
import paramiko

# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 密钥文件路径
private_key_path = '/path/to/private_key'

# 连接到SFTP服务器
result = ssh.connect('hostname', username='username', key_filename=private_key_path)

# 检查连接结果
if result is None:
    print("连接成功")
else:
    print("连接失败:", result)

# 关闭SSH连接
ssh.close()

上传、移除文件

上传:put

python 复制代码
sftp.put(local_file_path, remote_target_path)

移除:remove

python 复制代码
result = sftp.remove(remote_target_path)
if result is None:
    print(f"SFTP: Successfully remove file{remote_target_path}")
else:
    print(f"sftp: failed to remove file{remote_target_path}, removing result:", ssh_result)

注意

这里的put方法跟cmd的不一样,python的put指定的是目标文件路径 ,cmd指定的是目标目录。也就是说python支持复制的同时改名,而cmd会将文件同名复制过去

图形化界面:Filezilla使用密钥文件上传

拓展阅读:Filezilla使用密钥文件上传

相关推荐
M--Y6 小时前
LangGraph 工作流模式
开发语言·javascript·python·langchain·大模型·llm·langgraph
岁月宁静7 小时前
DeepSeek Harness 实战与架构解析:让 Agent 从“会聊”到“能交付”
人工智能·python·agent
LiaoWL1237 小时前
NumPy 入门实战(二):向量化与余弦相似度——从 ndarray 到 Embedding
python·numpy·embedding
forest_097 小时前
多 Agent 协作第二课:交叉验证≠独立验证
人工智能·python·算法·机器学习·prompt·agi
Decay__10 小时前
VMware 安装 SQL Server 双节点 AlwaysOn 可用性组教程 —— WSFC、AG 与侦听器完整部署(系列核心篇)
运维·数据库·sql·mysql·架构
测试界的小码农10 小时前
【Linux 命令实战(06):Linux 文件权限管理,掌握 chmod、chown、chgrp】
linux·运维·服务器
databook10 小时前
时间序列数据,先拆规律还是先查异常
python·数据挖掘·数据分析
师夷长技以自愈11 小时前
手搓 AI Agent 第 8 篇:从手写循环到画流程图——LangGraph 封装
人工智能·python
陈希12311 小时前
负载均衡与高可用:LVS、HAProxy、Keepalived 实战
运维·负载均衡·lvs
aifannihao12 小时前
Rust 1.100 的 DropGuard:用 Python 实测失败回滚与吞异常
python·rust·异常处理·标准库·contextlib