如何通过堡垒机将文件传输至私有子网内的EC2实例
Windows下通过堡垒机向私有子网EC2传输文件的方法
以下两种方案都不需要将私钥存储在堡垒机上,直接从本地完成文件传输:
方案一:使用Putty配套的pscp工具
Putty安装包自带pscp.exe(文件传输工具)和plink.exe(命令行SSH工具),通过代理转发实现跨堡垒机传输:
- 确保本地私钥为
.ppk格式(如果是AWS下载的.pem,用Puttygen转换:打开.pem后选择「Conversions」→「Export OpenSSH key」保存为.ppk) - 执行以下命令:
pscp -i "本地EC2私钥路径.ppk" -proxycmd "plink -i 本地堡垒机私钥路径.ppk 堡垒机用户名@堡垒机公网IP -nc %host:%port" 本地文件路径 EC2用户名@EC2私有IP:目标路径
参数说明:
-i:指定目标EC2的身份验证私钥-proxycmd:通过plink建立到堡垒机的代理,转发EC2的SSH流量%host:%port:占位符,自动替换为EC2的私有IP和SSH端口(默认22)
示例:
pscp -i "C:\keys\ec2-key.ppk" -proxycmd "plink -i C:\keys\bastion-key.ppk ec2-user@1.2.3.4 -nc 10.0.1.5:22" C:\local-files\test.txt ec2-user@10.0.1.5:/home/ec2-user/
方案二:使用Windows自带OpenSSH的scp命令
Windows 10/11默认预装OpenSSH客户端,若未安装可在「设置→应用→可选功能」中添加:
- 将堡垒机和EC2的私钥转换为
.pem格式(Puttygen打开.ppk后选择「Conversions」→「Export OpenSSH key」保存) - 调整私钥文件权限:右键私钥文件→「属性→安全→高级」,禁用继承并删除所有权限,仅添加当前用户的读取权限(避免OpenSSH报错)
- 执行以下命令:
scp -i "本地EC2私钥路径.pem" -o ProxyJump="堡垒机用户名@堡垒机公网IP -i 本地堡垒机私钥路径.pem" 本地文件路径 EC2用户名@EC2私有IP:目标路径
参数说明:
-o ProxyJump:直接指定堡垒机作为SSH跳板,无需额外配置代理- 若堡垒机SSH端口非默认22,需在堡垒机地址后加
-p 端口号,例如ProxyJump="ec2-user@1.2.3.4 -p 2222 -i C:\keys\bastion-key.pem"
示例:
scp -i "C:\keys\ec2-key.pem" -o ProxyJump="ec2-user@1.2.3.4 -i C:\keys\bastion-key.pem" C:\local-files\test.txt ec2-user@10.0.1.5:/home/ec2-user/
常见问题说明
- 之前scp连接超时的原因:直接连接EC2私有IP时,本地网络无法访问私有子网,必须通过堡垒机转发流量,未添加代理参数会导致连接失败
- 无需将私钥存储在堡垒机:上述两种方案均在本地持有私钥,仅通过堡垒机转发SSH流量,私钥不会上传至堡垒机,安全性更高
内容的提问来源于stack exchange,提问作者hitaton
相关产品推荐
相关产品推荐

