ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

WinSCP 替代:electerm 跨平台 SSH/SFTP 客户端

WinSCP 替代:electerm 跨平台 SSH/SFTP 客户端 用 WinSCP 的人多半不是因为它多好用而是因为 Windows 上一直没遇到更顺手的。我用了它大概八九年从早期的 4.x 一直用到 5.x界面几乎没变过左边本地、右边远端双栏拖拽稳得像块砖。问题在于场景变了。我现在的日常是 Windows 台式机加一台 macBook中间还要连 Ubuntu 的测试机、树莓派、几台客户内网的跳板机WinSCP 只在 Windows 上存在一旦换机器会话列表、密钥路径、编码设置全部要重来一遍。去年给一个客户排障它的生产机是 CentOS日志目录里全是一堆 GBK 文件名WinSCP 那边编码选项改了三次还是花屏我临时换了一个开源的 SSH 客户端——就是这篇要聊的主角 electerm一次就拖下来了。这篇文章写给三类人一是长期用 WinSCP、想换但怕迁移成本太高的运维和老后端二是在 Windows、macOS、Linux 之间来回切受够了会话配置不同步的开发者三是需要图形化 SFTP 又要顺手用终端的人。electerm 在 GitHub 上开源走的是 SSH 客户端加 SFTP 图形界面的路子跨三平台配置能同步终端和文件面板放在同一个窗口里。下面我会把它拆开讲清楚它凭什么替掉 WinSCP、哪些地方它反而更弱、迁移时踩过哪些坑以及我长期使用后沉淀下来的配置习惯。1. 我在什么场景下决定放弃 WinSCP1.1 不是 WinSCP 变差了是我的工作方式变了先把话说在前头WinSCP 到今天依然是一个非常合格的工具它对 SFTP、SCP、FTP、WebDAV 的支持相当完整脚本化和命令行参数在 Windows 批处理里几乎是最好用的那一档我到现在还有几个自动化任务在用它。真正让我动摇的是三个很具体的使用摩擦。第一个是平台绑定。WinSCP 只有 Windows 版本。我的工作流是白天在 Windows 上写代码、跑编译晚上在 macBook 上继续看日志和改配置。这两台机器上要维护两套连接信息一旦服务器密码改了就得到处同步。有人说那就装虚拟机我试过为了连一台内网机器开一个虚拟机这个开销放在 2025 年实在说不过去。第二个是终端和文件的割裂。WinSCP 内置了一个终端但那个终端的能力跟专业工具差得比较远没有像样的多标签分屏、没有关键字高亮、没有方便的复制策略。我以前的固定动作是 WinSCP 管文件、Xshell 或 PuTTY 管命令两个窗口来回 AltTab粘一段路径都要切两次。这个动作一天重复几十遍累积起来就是实打实的时间损耗。第三个是多机操作的效率问题。我手上有六台规格一致的测试机改完一个配置文件要同步到六台上。WinSCP 的同步浏览能做到但同屏输入命令这种需求它没有。而这个需求在换环境、批量改 hosts、批量看服务状态的时候出现得非常频繁。1.2 我挑替代品的六条硬指标踩过一次坑之后这次换工具我没有直接搜最好的 SSH 客户端而是先列了自己的硬指标再拿工具去对。这套办法推荐给所有准备换工具的人因为它能防止你被宣传页上那些炫酷截图带偏。指标具体要求我的权重跨平台Windows、macOS、主流 Linux 发行版都能装界面基本一致必须图形化 SFTP双栏拖拽、目录权限可视化修改、支持外部编辑器必须开源可审计代码开放能自己看依赖不被闭源组件卡住必须配置可迁移会话、密钥路径、主题能导出或同步换机器十分钟搞定高终端体验多标签、分屏、字体渲染清晰、支持 Zmodem高资源占用台式机上可以不计较但笔记本上不能一开就吃掉一整核中按这六条筛下来能同时满足前三条的其实不多。很多外观很漂亮的 SSH 客户端是闭源的用起来不错但数据都存在厂商服务器上导出选项藏得很深还有一些只做终端不做 SFTP文件操作还得回到命令行用 scp反而更麻烦。提示选这类工具时优先确认会话数据存在哪里。存在本地文件里的出问题能自己修只存在云端并且不能导出的那你的连接信息实际上不完全归你管。1.3 候选名单和淘汰理由我当时列了四个候选electerm、WindTerm、Tabby还有继续留在 WinSCP 加 PuTTY 的组合。淘汰过程大致是这样的。WindTerm 我很喜欢它是 C/C 写出来的启动快、内存省在老旧笔记本上体验明显更好串口和 Telnet 支持也扎实。它的短板在于图形化 SFTP 的交互细节拖拽和右键菜单的顺手程度跟 WinSCP 那条成熟路线还有距离而且界面风格偏工程化主题定制余地小一些。Tabby 界面是这几个里最现代的插件体系设计得干净配置和配色方案都很漂亮。但它的重点在终端本身SFTP 文件管理需要依靠额外能力补足对我这种一半时间在拖文件的人来说不够直接。WinSCP 加 PuTTY 的组合继续用其实也能过成本是每天多切换几十次窗口以及每次换设备都要重建一遍会话。最后留在 electerm 上的理由说起来有点土它的窗口布局最接近 WinSCP。左边一棵会话树右边上面是终端标签、下面是 SFTP 双栏操作习惯基本不用改迁移那天的适应期不到一小时。对一个要天天用八九个小时的工具来说这个不用重新学的价值比多几个炫酷功能高得多。2. electerm 拆开看它凭什么同时管好终端和文件2.1 一个 Electron 外壳里装了什么electerm 是拿 Electron 做的桌面外壳界面用前端技术栈渲染终端部分用的是 xterm.js 这类成熟方案SSH 和 SFTP 的协议实现靠的是 Node 生态里的 ssh2 库。这个技术选型直接决定了它的性格优点和缺点都来自同一处。说它为什么能同时做好终端和文件面板得回到 SSH 协议本身。很多人以为 SFTP 是另一个协议、另一个端口其实不是。SFTP 是 SSH 之上的一个子系统它和你在终端里敲命令用的 shell 会话共用同一条 TCP 连接只是各自占一个独立的 channel。所以你连上一台机器同一条加密隧道里可以同时跑着一个 shell 会话、若干个 SFTP 文件操作、还有你需要时开的端口转发。这三条通道互相隔离又共享底层连接任何一条断了不会把另外两条带崩。理解这一点之后electerm 的布局就很好解释了左边那棵树是连接配置右侧上半部分的终端标签对应 shell channel下半部分的双栏对应 SFTP 子系统。它们不是两个软件拼在一起而是同一个连接上的两个视图。这也是它比WinSCP 管文件 另一个终端工具管命令更高效的根本原因——省掉的不是一次点击而是一次完整的重连和一次身份认证。Electron 的代价也在这里。它自带一整个浏览器内核一个空窗口的内存占用就是好几十兆起步开十几个会话之后跟一个原生应用比会明显更吃资源。我在 16G 内存的台式机上完全没有感觉在 8G 的旧笔记本上能接受但不轻松在 4G 的机器上就会有点难受。这条取舍你要提前想清楚换来的是跨平台一致性和更快的功能迭代速度付出的是内存。2.2 和 WinSCP、WindTerm、Tabby 的横向对照下表是我自己实测后的总结版本不同细节会有差异具体能力请以各自仓库当前说明为准。维度electermWinSCPWindTermTabby开源情况开源闭源开源开源跨平台Windows / macOS / Linux仅 Windows三平台三平台SFTP 图形界面内置双栏拖拽顺手最成熟功能最全有交互略生硬需额外补足终端能力多标签、分屏、高亮基础强性能好最强插件丰富资源占用偏高低很低偏高配置同步支持可自选后端无靠手动拷配置无有上手难度低几乎不用学低中中从表里能看出一个清晰的定位electerm 是这几个里终端和文件两条腿最均衡的那个。它没有任何一项是绝对第一——文件管理不如 WinSCP 成熟终端性能和内存不如 WindTerm界面和插件生态不如 Tabby——但它也没有明显短板而且跨平台和配置同步这两点直接命中了我最痛的地方。2.3 安装与首次启动要留意的几个细节安装包在它自己的 GitHub 仓库 Release 页面按系统选对应的产物。我列一下我实际用过的几种方式以及每种方式需要注意什么。Windows直接用安装包装完会在开始菜单创建快捷方式。不喜欢安装的可以下便携版解压即用配置文件会写在程序目录旁边拷贝到 U 盘就能带走整套会话。macOS下载对应架构的 dmg。第一次打开如果提示来源限制在系统设置 - 隐私与安全性里放行即可。注意 M 系列芯片和 Intel 芯片的包不是同一个。Linux官方会给 AppImage、deb、rpm 等几种形式。AppImage 需要先给可执行权限用chmod x之后双击如果你在公司环境里不方便用 AppImage选 deb 或 rpm 走包管理器更省心。# AppImage 形式的启动方式 chmod x electerm-*-linux-x86_64.AppImage ./electerm-*-linux-x86_64.AppImage # 如果提示缺少 FUSE sudo apt install -y libfuse2第一次启动后我建议先做两件事一是进设置把界面语言切成中文如果版本支持二是把字体换成你习惯的等宽字体。默认字体在很多环境下渲染中文会比较糊换成更合适的等宽字体之后终端里看ls -l的对齐会舒服很多。注意便携版和安装版的配置目录不一样。如果你一开始用便携版后来换成安装版会发现会话全没了别慌把配置目录里的文件手动拷过去就行。反过来也一样。3. 把 WinSCP 的日常操作搬到 electerm3.1 会话书签与旧配置的导入WinSCP 的会话存在注册表或者 ini 文件里electerm 用的是自己的 JSON 配置。两者格式不通所以别指望一键导入实际最省事的路径是重录一遍。听起来麻烦但我手上二十多个会话录完花了不到二十分钟而且录的过程顺手把一批过期条目清理掉了。录入的时候有几个字段值得认真填不要图快名称用环境-用途-机房这种结构比如prod-web-sh-01、test-db-bj-02。会话一多模糊命名会让你每次都要点开看一眼 IP 才敢连。端口非 22 的端口一定要显式填。我见过有人在测试环境里被改成了 2222连接失败排查了半小时才发现是端口。认证方式优先用密钥。密码方式能用但每次都要输而且密码会以可解密的形式存在本地配置文件里。编码这个字段后面单独说先记住它有。另外它支持读取 OpenSSH 风格的 config。如果你本来就维护着~/.ssh/config在里面写好的 Host 别名、端口、用户名、密钥路径可以被识别进来省掉一部分重复录入。对于需要跨跳板机的场景config 里的写法是这样的Host jump HostName 10.0.0.10 User ops Port 22 IdentityFile ~/.ssh/id_ed25519 Host inner-db HostName 172.16.8.21 User dba ProxyJump jump这段配置的意义是你只需要把inner-db加进客户端它会自动先连jump再由jump转到内网机器你不用手动开两次连接。这套写法在 OpenSSH 生态里是通用的会写一次以后换任何客户端都能复用。3.2 双栏文件管理拖拽、权限、外部编辑器SFTP 面板的基本操作跟 WinSCP 高度一致从本地区域拖到远端区域就是上传反过来就是下载右键能新建目录、重命名、删除。真正值得讲的是三个容易被忽略的能力。第一是权限修改。右键文件属性可以像 WinSCP 那样用勾选框改权限也可以直接输入八进制数字。这里有个很实际的场景往服务器上传一个部署脚本上传后因为没有执行位而跑不起来直接右键勾上执行权限比回到终端敲chmod快得多。记住那个八进制对照关系就够了读是 4、写是 2、执行是 1755 表示属主可读写执行、同组和其他人可读可执行。第二是外部编辑器。双击一个文本文件选用外部编辑器打开它会下载到临时目录、调用你系统默认的编辑器。你在编辑器里改完保存切回客户端它会检测到文件变化并自动回传。这个功能我用来改 nginx 配置和一堆 yaml比在终端里开 vim 舒服得多尤其是需要大段粘贴的时候。注意外部编辑器走的是下载到临时文件再上传的路径所以它一定会有一次时间差。如果你在编辑期间别人也改了同一个文件后保存的会直接覆盖前者。生产环境的配置改动前先复制一份备份是基本纪律。第三是编码处理。这是从 WinSCP 迁移过来的人最容易卡住的地方我放在踩坑章节详细说这里先给结论遇到乱码优先怀疑远端 locale 和文件名实际编码而不是客户端设置错了。3.3 终端里的 Zmodem让 rz 和 sz 重新可用Zmodem 是老一代 Unix 玩家非常熟悉的东西。在终端里敲sz filename文件会顺着终端的字符流传回来敲rz等待你把文件推上去。它的原理不是新开一个连接而是在终端的数据流里嵌入协议帧客户端识别到特定序列之后接管这段流弹出文件选择框。WinSCP 内置终端对这个支持一般electerm 在这方面做得不错配合服务器的lrzsz包就能用# 服务器端先确认装了 lrzsz which sz || sudo yum install -y lrzsz # CentOS / RHEL 系 which sz || sudo apt install -y lrzsz # Debian / Ubuntu 系 # 从服务器往本地取文件 sz /var/log/app/error.log # 从本地上传到服务器当前目录 rz -E用rz上传时加-E是我踩坑之后养成的习惯它对已存在的文件做覆盖时会走更稳的路径避免传完之后目录里出现一堆带后缀的临时文件。另外要注意rz 上传的目标目录是服务器当前所在目录不是客户端面板里选中的目录这个认知差会导致很多人传完之后找不到文件以为上传失败了。3.4 用端口转发把内网数据库接到本地客户端这个功能是我认为所有 SSH 客户端里价值被低估最多的一个。很多内网服务的数据库端口不对外开放但跳板机是通的。这时候不需要改任何防火墙规则也不需要给数据库配远程访问权限一条 SSH 隧道就够了。原理很简单SSH 连接本身支持开一条转发通道把本地某个端口收到的流量加密后送到远端再由远端帮忙转发到目标地址。配置里通常填三个值本地端口、远端目标主机、远端目标端口。比如本地监听 13306转发到远端网络里的172.16.8.21:3306之后你在本机用数据库客户端连127.0.0.1:13306就等同于连上了那台内网数据库。几条实操经验本地端口尽量避开常用端口别用 3306 本身否则本机装了数据库的话会冲突。隧道建立后不要关那个标签隧道是挂在会话上的会话断了隧道就断。长时间挂着隧道时把 keepalive 打开否则中间的网络设备会因为会话空闲把它清理掉表现就是用着用着突然连不上。数据库客户端记得关掉 SSL因为链路已经由 SSH 加密很多内网库没有配证书开着反而报错。3.5 多标签、分屏与关键字高亮终端这边我最常用的三个动作是多标签、分屏、关键字高亮。多标签不用多说一台机器一个标签按环境分组。分屏的价值在于对比比如左边开着tail -f看日志右边敲命令观察服务状态不用来回切。关键字高亮是我从专业终端工具那边带过来的习惯。给ERROR、Exception、Timeout、failed这类词配上红色看日志的效率提升很明显——你不需要逐行读扫一眼就能定位到异常段。同理把success、ok、done配成绿色批量操作的进度一眼可见。3.6 多机同屏输入与批量操作前面说过我有六台规格一致的测试机。这种场景下同屏输入的价值非常大你在一个输入框里敲命令所有被选中的会话同时执行输出分别显示在各自的窗口里。适用场景批量改 hosts、批量看某个服务状态、批量下发一个脚本、批量改时区。不适合的场景同样要记住任何会重启服务、改网络、改内核参数的操作都不要用同屏输入一旦打错六台同时挂掉恢复成本是单台的六倍。我的做法是先用同屏跑只读命令看状态确认无误之后再单台执行变更跑通了再放开批量。3.7 配置同步与备份会话多起来之后同步就成了刚需。electerm 支持把配置同步到自己的后端也支持接别的存储方式。我的建议是优先手动导出加版本管理其次才是自动同步。原因很实际。自动同步虽然方便但会话配置里含主机地址、用户名、密钥路径一旦同步账号出问题等于把一份内网拓扑图交出去了。我自己的做法是每周手动导出一次配置放进一个私有仓库导出的 JSON 里密钥部分本来就不含私钥内容风险可控。换机器的时候从仓库拉下来导入十分钟搞定。3.8 主题与字体把每天看八小时的东西调舒服这一节看起来像废话但我确实认为它值得单独说。终端是每天盯八小时的东西配色和字体的舒适度直接影响疲劳程度。几个我调过之后不再改的项字体选一个中英文对齐都好的等宽字体字号比默认大 1 到 2 号。默认字号在 1080p 屏幕上偏小。行高稍微调大一点密集输出的时候更容易定位行。主题不要选纯黑底纯白字对比度太高长时间看眼睛累。深灰底配柔和前景色更耐看。光标改成块状在长命令行里定位插入位置更快。这些设置改完可以导出跟会话一起带着走换机器时不用重新调。4. 迁移过程中真正让我卡住的几个问题4.1 中文文件名乱码问题多半不在客户端这是我迁移第一天就撞上的坑。远端一台老服务器上的日志目录文件名在 WinSCP 里显示正常在 electerm 里全是方块或者问号。我一开始以为是客户端编码设置的问题来回改了三次没解决。后来把链路捋清楚了才明白SFTP 协议规定文件名按 UTF-8 传输但老服务器上创建这些文件的程序当年用的是 GBK 或者 Latin-1文件名在文件系统里存的就是那串字节。客户端拿到字节按 UTF-8 去解码自然就花了。WinSCP 之所以显示正常是它默认对非 UTF-8 做了一层容错处理。解决路径有两条。一是客户端里把远端编码显式指成对应编码能解决大部分显示问题二是从根上处理把远端环境的 locale 统一成 UTF-8让新生成的文件名都是 UTF-8。前者是临时方案后者才是长久之计。查远端 locale 的命令locale # 关注 LANG 和 LC_ALL如果是空或者 C就该改了 # 临时生效 export LANGzh_CN.UTF-8 # 永久生效Debian / Ubuntu sudo locale-gen zh_CN.UTF-8 sudo update-locale LANGzh_CN.UTF-84.2 私钥格式从 .ppk 到 OpenSSH 的转换如果你以前在 Windows 上用 PuTTY 生成过密钥那私钥多半是.ppk格式electerm 不认。反过来如果你手上有 OpenSSH 生成的新格式私钥有些较老的客户端也不认。这类连接被拒绝、提示认证失败的问题八成是格式不匹配。判断方法很简单用文本编辑器打开私钥文件看开头那一行写着BEGIN OPENSSH PRIVATE KEY的是新格式写着BEGIN RSA PRIVATE KEY的是传统 PEM 格式而.ppk文件开头会明确写着PuTTY-User-Key-File。转换方式我推荐两种按你手上有什么工具选# 传统 PEM 和 OpenSSH 新格式互转会原地覆盖先备份 ssh-keygen -p -m PEM -f ~/.ssh/id_rsa # 转成传统 PEM ssh-keygen -p -m OPENSSH -f ~/.ssh/id_rsa # 转成 OpenSSH 新格式 # 权限必须对否则 OpenSSH 相关工具会直接拒绝加载 chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519 chmod 644 ~/.ssh/id_ed25519.pub.ppk的转换需要一个专门的转换工具或者直接用 PuTTY 自带的密钥生成器把私钥重新导出成 OpenSSH 格式。这一条看起来琐碎但它是跨平台迁移里出现频率最高的障碍之一。注意私钥文件权限过宽时很多工具不是报警告而是直接拒绝使用。我遇到过有人把私钥放在共享盘上权限是 777折腾了一下午也没连上最后就是这一条。4.3 大文件传输与断点续传WinSCP 在大文件传输和断点续传这块做得很成熟electerm 相对弱一些。实际表现是几百兆的文件走 SFTP 没问题速度也正常但如果传到一半网络抖了续传不一定能自动接上有可能需要重传。我的应对办法是把大文件操作从图形界面剥离出去交给命令行# 带续传和进度显示的文件同步比在图形界面里拖更稳 rsync -avz --partial --progress \ -e ssh -p 22 \ ./bigdata.tar.gz ops10.0.0.10:/data/backup/ # 参数含义 # --partial 保留中断的部分文件下次可以接着传 # --progress 显示进度 # -z 传输时压缩文本类文件收益明显已压缩的包收益很小这条建议其实超出客户端本身了图形界面适合小文件和零散操作大文件和批量同步交给 rsync。这两个分工明确之后我在客户端上再也没有因为传输中断浪费过时间。4.4 内存占用与老机器上的取舍前面提过 Electron 的内存代价。实测下来开五个会话加一两个 SFTP 面板占几百兆内存是正常的跟一个原生客户端比是明显的差距。在老机器上的取舍逻辑是这样的如果机器内存 8G 以上这点占用不值得纠结如果是 4G 的老笔记本而且你的主要需求就是终端敲命令、几乎不拖文件那 WindTerm 这类轻量方案更合适。工具要匹配场景不是越新越好。4.5 会话断连与 keepalive 设置用着用着就断了这件事在跨机房、跨云的环境里几乎必然遇到。原因通常是中间的防火墙或者 NAT 设备对空闲连接有老化时间比如 30 分钟没流量就回收会话。你的客户端以为自己还连着实际链路已经没了。解决办法是在 SSH 配置里打开心跳让客户端定期发一个空包维持链路Host * ServerAliveInterval 30 ServerAliveCountMax 6 TCPKeepAlive yes这段配置的意思是每 30 秒发一次心跳连续 6 次没有回应才判定断线总共给了三分钟的容错。这个组合能解决我遇到的绝大部分非人为断连。5. 长期使用下来我固定的几个习惯5.1 会话命名和环境隔离会话一多命名就是纪律。我的规则是环境-角色-位置-序号比如prod-web-bj-03、stg-db-sh-01。同时在客户端里按环境分组生产、预发、测试、本地分开生产环境的组用不同颜色标识。这个颜色不是为了好看是为了在你困得不行的时候减少连错机器的概率。连错生产环境敲错命令是所有运维事故里最常见的一类。5.2 密钥管理和默认认证方式我现在所有机器都走密钥密码登录只在极少数老设备上保留。密钥统一放在一个固定目录命名和会话命名规则对应权限一律 600。同一条密钥如果用在多台机器上一旦某台机器的环境被污染风险会横向扩散所以我现在倾向于按机器或者按环境分开生成密钥虽然麻烦一点但出了问题能精准吊销。另外客户端会记录会话信息到本地配置里这意味着你的工作笔记本本身就是一个敏感载体。加密磁盘、开机口令这些基本动作该做还是要做。5.3 什么时候我仍然会打开 WinSCP最后说句公道话。到目前为止我有两个场景还在用 WinSCP一是 Windows 上的批处理自动化脚本它的命令行参数和脚本能力确实成熟我暂时没打算改二是极少数只提供 FTP 的老设备WinSCP 对老协议的支持面更宽。除此之外的日常操作无论文件还是命令我都已经切到 electerm 上了。工具替换不需要一刀切也不需要仪式感。给自己两周并行使用期把最痛的场景先迁过去剩下的按需保留才是成本最低的做法。我自己的并行期是十天第十天之后 WinSCP 就只剩下那两个自动化任务了。
返回列表