1. 项目概述:为什么一个“创建EC2并用Putty/WinSCP连接”的操作,值得花一整篇干货来写?
在AWS云平台的实际落地过程中,“创建一台Linux服务器并连上去干活”是90%以上运维、开发、测试、甚至数据工程师每天睁眼后的第一件事。但就是这个看似最基础的操作,我带过的二十多个新人团队里,平均每人卡在前30分钟——不是卡在“点哪里”,而是卡在“为什么点这里”“为什么连不上”“为什么权限被拒”。标题里那个“Step by Step”,绝不是教你怎么点鼠标,而是还原真实战场:你面对的是一个没有图形界面的远程机器,它不认你的Windows密码,不接受默认端口,甚至可能连SSH服务都没启动。Putty和WinSCP不是两个独立工具,它们是一体两面:一个是命令行的“手”,一个是文件传输的“脚”,缺一不可。关键词EC2实例、AWS控制台、Putty、WinSCP、密钥对、SSH连接、安全组配置,每一个词背后都藏着一个可能让你重启三遍的坑。这篇文章适合三类人:刚考完AWS CCP想动手验证概念的初学者;被临时拉去救火、需要5分钟内把测试环境搭起来的开发;还有那些已经会操作、但总在客户现场被问“为什么必须这样配”的中级工程师。它不讲AWS白皮书里的定义,只讲我在金融客户现场凌晨三点排查连接失败时,真正翻烂的那几页文档、改掉的那三行配置、以及删掉又重建的第7个密钥对。
2. 整体设计与思路拆解:为什么必须严格遵循“密钥对→安全组→实例启动→连接验证”这个顺序?
很多人一上来就直奔EC2控制台点“Launch Instance”,结果一路狂点到“Review and Launch”,最后发现连不上——然后开始怀疑网络、怀疑本地防火墙、怀疑AWS抽风。其实问题出在思维顺序上。EC2不是物理服务器,它的“可访问性”不是由硬件决定的,而是由三层逻辑门禁共同控制的:身份认证层(密钥对)→ 网络准入层(安全组)→ 服务运行层(实例OS状态)。这三层必须按序构建、逐层验证,跳过任何一层都会导致连接失败,且错误提示极其模糊(比如Putty报“Connection refused”或“Network error: Connection timed out”,你根本分不清是没通网、没开SSH、还是密钥错了)。我见过最典型的错误是:先创建实例,再生成密钥对,然后试图把新密钥“塞进”已运行的实例——这是完全无效的。因为EC2实例启动时,AMI镜像会读取启动时指定的密钥对,并将其公钥自动写入/home/ec2-user/.ssh/authorized_keys(Amazon Linux)或/home/ubuntu/.ssh/authorized_keys(Ubuntu)。实例一旦运行,这个过程就结束了,后续无法动态注入。所以正确路径只有一条:密钥对必须在实例启动前创建并选定。另一个常被忽视的点是安全组。新手常以为“开放22端口”就够了,但安全组规则是“有状态”的:入站(Inbound)允许22端口,出站(Outbound)默认全放行,这没问题;但如果出站规则被手动改成“仅允许特定IP”,那么实例连自己的yum源都连不上,系统更新、软件安装全失败,最终导致SSH服务根本起不来。因此,出站规则我永远保留“Type: All traffic, Protocol: All, Destination: 0.0.0.0/0”。这不是偷懒,而是保证实例具备最基本的自愈能力。至于为什么选Putty和WinSCP组合?因为这是Windows生态下最轻量、最稳定、最无需额外依赖的方案。OpenSSH for Windows虽然原生,但密钥格式转换麻烦;MobaXterm功能强但进程臃肿,客户服务器资源紧张时反而成负担。Putty专注SSH隧道,WinSCP专注SFTP协议,两者共享同一套密钥配置,故障隔离清晰——如果Putty能连而WinSCP不能,问题一定出在SFTP服务或用户权限上,而不是网络或密钥本身。
3. 核心细节解析与实操要点:密钥对、安全组、实例类型,每个选择背后都有硬逻辑
3.1 密钥对:不是“下载.pem文件”就完事,而是要完成三重转换
密钥对(Key Pair)是AWS EC2的身份凭证,其本质是一对RSA加密密钥:公钥由AWS托管并注入实例,私钥由你本地保管。但Windows系统无法直接使用OpenSSH标准的.pem格式私钥,必须转换为Putty能识别的.ppk格式。这个转换过程有三个致命细节:
私钥权限必须严格保护:
.pem文件下载后,右键属性 → 安全 → 编辑 → 移除所有非当前用户的访问权限(尤其要删除“Users”组的读取权)。AWS官方文档强调这点,是因为如果私钥被恶意程序读取,攻击者就能无密码登录你的所有EC2实例。我曾在一个客户环境里发现,因开发人员将.pem文件放在共享目录,导致测试环境被植入挖矿脚本。PuTTYgen转换时的“Passphrase”不是可选项,而是必选项:很多教程说“留空即可”,这是巨大风险。留空意味着任何人拿到你的
.ppk文件就能直接连接。正确的做法是设置一个强Passphrase(如AWS-EC2-2024!DevOps),并在Putty的“Auth”设置中勾选“Attempt authentication using Pageant”——这样每次连接时,Pageant(Putty的密钥代理)会弹窗要求输入Passphrase,既防文件泄露,又免重复输入。实测下来,加Passphrase后Putty连接延迟增加不到0.3秒,安全收益却呈指数级。密钥长度必须为2048位或4096位:AWS控制台默认创建2048位RSA密钥。不要选1024位(已被证明不安全),也不要盲目选4096位(部分老旧AMI可能不兼容)。我们团队的标准是:生产环境一律4096位,测试环境2048位。转换时,在PuTTYgen中加载
.pem后,顶部会显示“Key type: RSA”和“Number of bits in generated key: 2048”。如果显示为1024,说明你下载的密钥有问题,必须删除重建。
提示:PuTTYgen转换步骤必须完整执行——加载
.pem→ 点击“Save private key” → 保存为.ppk→ 此时PuTTYgen窗口左上角会显示“Key comment: ”,这个comment会成为Putty连接时的标识,务必记住。
3.2 安全组:两条规则定生死,多一条是冗余,少一条就瘫痪
安全组(Security Group)是EC2实例的虚拟防火墙,其规则是“全部拒绝,按需放行”。对于SSH连接,只需且仅需两条规则:
| 类型(Type) | 协议(Protocol) | 端口范围(Port Range) | 源(Source) | 说明 |
|---|---|---|---|---|
| SSH | TCP | 22 | My IP或0.0.0.0/0 | 入站规则,允许SSH连接。My IP最安全,但如果你的公网IP是动态的(家庭宽带常见),则必须用0.0.0.0/0,此时务必配合密钥+强Passphrase。 |
| All traffic | All | All | 0.0.0.0/0 | 出站规则,允许实例访问任意外部地址。这是保证yum update、apt-get install、curl等命令可用的基础。 |
为什么不能只开22端口出站?因为SSH服务本身需要从网络获取时间同步(NTP)、DNS解析、甚至检查系统更新。当出站被限制,systemctl status sshd可能显示active,但实际sshd进程因无法解析localhost而卡在启动阶段。我遇到过最诡异的案例:安全组出站只允许80,443,结果实例启动后SSH能连,但10分钟后自动断开,日志里全是Failed to resolve 'localhost'。修复方法就是把出站规则改成All traffic。
注意:安全组绑定是“实例级”的,不是“账户级”。你可以在创建实例时新建安全组,也可以复用已有安全组。但切记:修改已绑定的安全组规则,会立即生效于所有关联实例。所以生产环境的安全组,我们团队会命名为
sg-prod-ssh-only-2024,并禁止直接编辑,只通过CloudFormation模板更新。
3.3 实例类型与AMI:选错AMI比选错CPU核心数后果更严重
实例类型(如t3.micro, m5.large)决定计算资源,而AMI(Amazon Machine Image)决定操作系统和预装软件。新手常犯的错误是:看到“Free Tier Eligible”就选t3.micro,却忽略AMI的兼容性。例如,Amazon Linux 2023是新一代AMI,但它的默认SSH配置禁用了密码登录,且ec2-user的shell被设为/bin/bash而非/bin/sh,这会导致某些旧版Shell脚本执行失败。而Ubuntu Server 22.04 LTS的默认用户是ubuntu,其sudo权限配置与Amazon Linux不同。因此,选择必须匹配你的技术栈:
- 开发测试环境:首选
Ubuntu Server 22.04 LTS。理由:社区支持广,Docker、Node.js、Python 3.11等新版本预装或一键安装方便,apt源稳定。 - 生产Web服务:首选
Amazon Linux 2023。理由:与AWS服务深度集成(如EBS优化、S3 CLI性能更好),安全补丁推送快,且amazon-linux-extras可轻松启用PHP 8.2、Nginx 1.24等。 - 绝对避免:
CentOS 7或RHEL 7。因为CentOS 7已于2024年6月30日停止维护,RHEL 7也进入EOL(End of Life),AWS控制台已将其标记为“Deprecated”,新创建的实例可能无法获得关键安全更新。
实例存储类型也需注意:t3.micro默认是EBS-backed(弹性块存储),这是正确的。但如果你误选了“Instance Store”,那么实例一旦停止(Stop),所有数据将永久丢失——因为Instance Store是挂载在物理主机上的临时SSD。而EC2的“Stop”操作,对Instance Store实例是禁止的,控制台会直接报错。所以,只要不是做HPC高性能计算,一律选EBS。
4. 实操过程与核心环节实现:从控制台点击到Putty成功登录的完整链路
4.1 创建密钥对:在启动实例前完成的唯一前置动作
这一步必须在进入EC2控制台“Launch Instance”流程之前完成,因为密钥对下拉菜单里只显示已存在的密钥。操作路径:AWS控制台 → 左上角服务 → “Compute” → EC2 → 左侧导航栏 → “Network & Security” → “Key Pairs” → 右上角“Create key pair”。
- Key pair name:输入有意义的名称,如
dev-us-east-1-2024。名称中包含区域(us-east-1)和年份,便于后期清理。AWS不允许重名,所以命名即管理。 - Key pair type:必须选
RSA。EC2目前不支持ECDSA密钥用于SSH登录(尽管底层支持,但控制台和AMI未适配)。 - Private key file format:选
pem。这是OpenSSH标准,兼容性最好。.ppk是Putty私有格式,AWS不提供直接下载。 - 点击“Create key pair”后,浏览器会自动下载一个
dev-us-east-1-2024.pem文件。立刻将该文件移动到一个专用文件夹,如C:\aws-keys\,并按前述要求设置文件权限。
实操心得:我习惯在创建密钥后,立即用记事本打开
.pem文件,确认开头是-----BEGIN RSA PRIVATE KEY-----,结尾是-----END RSA PRIVATE KEY-----。如果开头是-----BEGIN OPENSSH PRIVATE KEY-----,说明你误选了ED25519类型,必须删除重建。因为ED25519是OpenSSH 6.5+的新标准,但AWS EC2的AMI(尤其是Amazon Linux)默认SSH守护进程未启用ED25519支持,强行使用会导致“Server refused our key”错误。
4.2 启动EC2实例:五步精准配置,避开90%的启动失败
进入EC2控制台 → “Launch Instance” → 开始五步配置:
Step 1: Choose an Amazon Machine Image (AMI)
搜索框输入Ubuntu Server 22.04 LTS→ 选择官方发布的ubuntu/images/hvm-ssd/ubuntu-jammy-22.04-amd64-server-*(注意选amd64,不是arm64,除非你明确要用Graviton芯片)。免费套餐内t3.micro只支持amd64。
Step 2: Choose an Instance Type
选择t3.micro。注意:t3实例有“T-Burstable”特性,即CPU积分机制。新创建的实例初始有144个积分(24小时×6积分/小时),足够应付日常测试。但如果持续满负荷跑编译任务,积分耗尽后CPU会被限制在基准性能(10%),此时top命令会看到%Cpu(s)长期低于10。这是正常现象,不是故障。
Step 3: Configure Instance Details
- Number of instances:
1 - Network: 保持默认
default VPC(如果你没自建VPC) - Subnet: 选
us-east-1a(AZ,可用区) - Auto-assign Public IP:必须选
Enable。这是让实例拥有公网IP的关键。如果选Disable,实例只有内网IP,Putty无法从互联网连接。 - IAM role: 初学者可不选。但如果你后续要在实例里访问S3,必须在此处绑定一个有
s3:GetObject权限的Role,否则aws s3 cp命令会报AccessDenied。
Step 4: Add Storage
- Size:
8 GiB(默认值,足够系统和少量应用) - Volume Type:
General Purpose SSD (gp3)(新标准,比旧gp2性价比更高,IOPS和吞吐量可单独配置) - IOPS:
3000(gp3默认,无需修改) - Throughput:
125 MiB/s(gp3默认,无需修改)
Step 5: Configure Security Group
- Select an existing security group: 选“Create a new security group”
- Security group name:
ssh-access-dev - Description:
Allow SSH from my IP for dev access - Add Rule:
- Type:
SSH - Source: 点击“My IP”,控制台会自动填入你当前公网IP(如
203.0.113.25/32) - (可选)再加一条
Custom TCP规则,端口8080,SourceMy IP,为后续部署Web服务预留。
- Type:
- 关键动作:点击“Add Rule”下方的“Outbound rules”标签页 → 点击“Edit rules” → 删除所有现有规则 → 点击“Add rule” → Type选
All traffic→ Source填0.0.0.0/0→ 保存。
点击“Launch Instance”,弹窗要求选择密钥对 → 从下拉菜单选你刚创建的dev-us-east-1-2024→ 勾选“Confirm launch” → “Launch Instance”。
4.3 Putty连接:从双击到登录成功的三分钟全流程
实例启动需要1-2分钟。在EC2控制台,实例状态从pending变为running,且状态检查(Status Checks)显示两个绿色对勾(2/2 checks passed),才表示系统已就绪。
获取公网IP:在实例列表中,找到你的实例 → 在“IPv4 Public IP”列下,复制那个
54.210.xxx.xxx格式的IP地址。不要复制“Public DNS”,因为DNS解析可能有缓存延迟,而IP是即时有效的。配置Putty:
- 打开Putty → “Host Name (or IP address)”栏粘贴刚才复制的IP → Port填
22→ Connection type选SSH。 - 左侧树形菜单 → “Connection” → “Data” → “Auto-login username”填
ubuntu(如果是Ubuntu AMI)或ec2-user(Amazon Linux)。这一步省去登录后手动输入用户名。 - 左侧树形菜单 → “Connection” → “SSH” → “Auth” → “Private key file for authentication” → 点击“Browse”,选择你转换好的
.ppk文件(如C:\aws-keys\dev-us-east-1-2024.ppk)。 - 左侧树形菜单 → “Session” → 在“Saved Sessions”栏输入一个名字,如
ubuntu-dev-54.210.xxx.xxx→ 点击“Save”。这样下次直接双击这个名字就能连接,无需重复配置。
- 打开Putty → “Host Name (or IP address)”栏粘贴刚才复制的IP → Port填
首次连接与信任主机:
- 点击“Open”,Putty会弹出一个黑色终端窗口,第一行显示
WARNING: The server's host key is not cached in the registry.→ 这是正常的安全提示,表示Putty第一次连接此IP,需要确认服务器指纹。 - 点击“Yes”接受并缓存该指纹。此后再连同一IP,就不会再提示。
- 终端会显示
login as:,由于我们配置了Auto-login,这里会自动填入ubuntu,直接回车。 - 接着会弹出PuTTY Key Generator的Passphrase输入框(因为我们设置了Passphrase)→ 输入你设定的密码 → 点击“OK”。
- 如果一切正确,你会看到Ubuntu的欢迎信息,最后一行是
ubuntu@ip-172-31-xx-xx:~$,表示连接成功。
- 点击“Open”,Putty会弹出一个黑色终端窗口,第一行显示
实操心得:如果Putty卡在
login as:不动,大概率是Auto-login username填错了。请确认AMI类型:Ubuntu用ubuntu,Amazon Linux用ec2-user,CentOS用centos。如果卡在Passphrase输入框后报错Disconnected: No supported authentication methods available (server sent: publickey),说明.ppk文件转换失败或未正确指定。此时应重新用PuTTYgen加载.pem,确认Comment正确,再另存为.ppk。
4.4 WinSCP连接:文件上传的“零配置”落地
WinSCP与Putty共享密钥配置,因此连接极其简单:
- 打开WinSCP → “New site” → 文件协议选
SFTP(不是FTP!FTP不加密,AWS默认禁用)。 - 主机名:填EC2公网IP。
- 端口号:
22(SFTP默认端口)。 - 用户名:
ubuntu或ec2-user(同Putty)。 - 密码:留空。因为我们要用密钥登录。
- 点击“Advanced…” → 左侧树形菜单 → “Authentication” → “Authentication parameters” → “Private key file” → 浏览选择你的
.ppk文件。 - 点击“OK” → “Login”。
首次连接同样会提示信任主机,点击“Yes”。登录成功后,左侧是本地Windows文件系统,右侧是EC2的Linux文件系统(/home/ubuntu/)。你可以直接拖拽文件上传,或右键“Upload”。上传的文件默认权限是-rw-r--r--(644),如果要上传可执行脚本(如.sh),上传后需在Putty中执行chmod +x script.sh。
注意:WinSCP的“Environment” → “Shell”设置会影响上传路径。默认Shell是
/bin/bash,上传文件会到/home/ubuntu/。如果你在Putty中执行cd /var/www/html后再开WinSCP,WinSCP右侧的当前路径仍是/home/ubuntu/,不会自动同步。要改变默认路径,可在WinSCP“Advanced” → “Environment” → “Startup directory”中填/var/www/html。
5. 常见问题与排查技巧实录:那些凌晨三点让我抓狂的真实错误
5.1 连接超时(Network error: Connection timed out)
这是最常见也最让人崩溃的错误。Putty黑屏几秒后直接报错,不给任何中间信息。排查必须按顺序:
- 检查实例状态:EC2控制台中,实例状态是否为
running?状态检查是否为2/2 checks passed?如果状态检查失败(如1/2),说明系统内核或SSH服务没起来,需查看系统日志(见5.4)。 - 检查安全组入站规则:确认安全组的SSH规则Source确实是你的IP(
203.0.113.25/32),而不是0.0.0.0/0(虽然开放,但可能被公司防火墙拦截)。用手机4G网络换个IP再试,如果能连,说明是IP白名单问题。 - 检查实例是否分配了公网IP:在实例详情页,“Networking” → “Public IPs”字段是否有值?如果为空,说明“Auto-assign Public IP”被设为
Disable。此时只能停止实例(Stop),编辑网络设置,再启动(Start),但注意:停止EBS实例会保留磁盘,但IP会变。 - 终极验证:用AWS Session Manager连接:无需公网IP和安全组开放,只要实例有IAM Role且SSM Agent运行,就能连接。这是AWS官方推荐的故障排除通道。在EC2控制台,选中实例 → “Connect” → “Session Manager” → “Connect”。如果Session Manager能连,证明实例本身健康,问题100%出在网络层(安全组或NAT网关)。
5.2 服务器拒绝密钥(Server refused our key)
Putty显示Disconnected: No supported authentication methods available (server sent: publickey)。原因及解决:
| 可能原因 | 验证方法 | 解决方案 |
|---|---|---|
.ppk文件转换错误 | 用PuTTYgen打开.ppk,看顶部是否显示“Key type: RSA”和正确Comment | 重新用PuTTYgen加载.pem,确认无误后另存为.ppk |
| 用户名错误 | 在Putty中不填Auto-login,手动输入login as:,尝试ubuntu、ec2-user、admin | 查看AMI文档确认默认用户名 |
| 密钥未注入实例 | 在EC2控制台,实例详情页 → “Security” → “Key pair name”是否为你创建的密钥名? | 如果是None,说明启动时未选择密钥,必须终止(Terminate)实例,重新启动并选择密钥 |
| 实例OS禁用了公钥认证 | 用Session Manager连接后,执行sudo cat /etc/ssh/sshd_config | grep PubkeyAuthentication | 如果返回PubkeyAuthentication no,执行sudo sed -i 's/PubkeyAuthentication no/PubkeyAuthentication yes/g' /etc/ssh/sshd_config && sudo systemctl restart sshd |
5.3 登录后权限不足(Permission denied)
成功登录后,执行sudo apt update报sudo: effective uid is not 0, is /usr/bin/sudo on a file system with the 'nosuid' option set or an NFS file system without root privileges?。这是Ubuntu AMI的已知问题,源于/usr/bin/sudo文件的suid位被意外清除。修复命令:
sudo chmod u+s /usr/bin/sudo执行后,sudo即可正常使用。此问题通常发生在实例被异常关机(如强制终止)后,文件系统元数据损坏所致。
5.4 系统日志分析:当所有配置都对,但服务就是不启动
当Putty连得上,但systemctl status sshd显示inactive (dead),或journalctl -u sshd --no-pager -n 50显示Could not load host key: /etc/ssh/ssh_host_rsa_key,说明SSH服务的关键文件丢失。这通常是因为AMI镜像损坏或磁盘I/O错误。此时,最高效的排查方式是查看系统启动日志:
- 在EC2控制台,选中实例 → “Actions” → “Monitor and troubleshoot” → “Get system log”。
- 日志会以纯文本形式显示,从上往下滚动,重点查找:
Starting OpenBSD Secure Shell server...之后是否有FAILED字样。- 是否有
/dev/xvda1: clean, .../... files, .../... blocks(表示文件系统正常),如果没有,而是/dev/xvda1: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY,说明磁盘需要修复。
- 如果日志末尾是
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0),说明AMI镜像严重损坏,必须终止实例,换一个AMI重新启动。
独家避坑技巧:我养成了一个习惯——每次成功连接新实例后,第一件事不是装软件,而是执行
sudo apt update && sudo apt upgrade -y && sudo reboot(Ubuntu)或sudo yum update -y && sudo reboot(Amazon Linux)。这能确保系统打上最新内核和安全补丁,避免因已知漏洞导致SSH服务异常。重启后再次连接,如果还能连,说明系统真正稳定了。
6. 进阶实践与安全加固:从能连到连得稳、连得安全
6.1 用AWS Systems Manager Parameter Store管理密钥,告别本地存储
把.pem文件存在本地硬盘,是最大的安全短板。更优方案是:将私钥加密后存入AWS Systems Manager Parameter Store,然后用AWS CLI在需要时动态解密并生成.ppk。具体步骤:
- 在SSM控制台 → “Application Management” → “Parameter Store” → “Create parameter”。
- Name:
/ec2/dev-key-private - Type:
SecureString(自动启用KMS加密) - Value: 将
.pem文件内容(从-----BEGIN RSA PRIVATE KEY-----到-----END RSA PRIVATE KEY-----)完整粘贴进去。 - 在EC2实例上,安装AWS CLI并配置好IAM Role后,执行:
这样,私钥永不落地本地硬盘,且所有访问都记录在CloudTrail中,满足金融行业审计要求。# 获取加密的私钥 aws ssm get-parameter --name "/ec2/dev-key-private" --with-decryption --query "Parameter.Value" --output text > /tmp/key.pem # 转换为ppk(需提前安装putty-tools) puttygen /tmp/key.pem -O private -o /tmp/key.ppk # 用新ppk连接 plink -i /tmp/key.ppk ubuntu@54.210.xxx.xxx
6.2 用EC2 Instance Connect替代Putty,实现浏览器直连
AWS官方推出的EC2 Instance Connect,允许你在浏览器里直接打开一个基于Web的SSH终端,无需安装任何客户端。启用方法:
- 在EC2控制台,选中实例 → “Connect” → “EC2 Instance Connect” → “Connect”。
- 首次使用需在实例所在安全组中,添加一条入站规则:Type
SSH,Source0.0.0.0/0,DescriptionEC2 Instance Connect。 - 连接时,系统会自动生成一个一次性的SSH密钥对,并注入实例,有效期60秒。整个过程无需你管理密钥。
这对临时排查、客户演示、或无法安装Putty的受限环境(如公司Chromebook)极为友好。但注意:Instance Connect依赖实例上运行的ec2-instance-connect服务,该服务在主流AMI中默认启用,无需额外配置。
6.3 WinSCP高级技巧:同步文件夹与自动化脚本
WinSCP不只是拖拽工具。在“Commands”菜单中,可以执行mirror命令实现双向文件夹同步:
- 本地路径:
C:\project\src\ - 远程路径:
/home/ubuntu/project/src/ - 命令:
mirror -delete -criteria=both C:\project\src\ /home/ubuntu/project/src/
此命令会删除远程端不存在于本地的文件,并覆盖内容变更的文件,实现真正的代码同步。更进一步,可以将此命令保存为WinSCP脚本(.txt文件),然后用Windows计划任务定时执行,实现全自动部署。
我个人在实际使用中发现,对于超过100MB的大文件上传,WinSCP的“Transfer Settings” → “Endurance”选项必须开启。否则,网络抖动会导致传输中断,且WinSCP不会自动重试。开启后,它会自动分片、校验、重传,实测大文件上传成功率从70%提升到100%。这个细节,连WinSCP官网文档都藏在FAQ深处,但却是生产环境的刚需。