连接sftp到另一台服务器的核心操作就是一条命令:在终端里输入sftp 用户名@服务器IP,输完密码就能像操作本地文件夹一样读写远程文件。 别被那些复杂的图形界面吓到,sftp本质上走的是SSH协议,加密可靠,而且大多数Linux服务器天生就支持它,根本不用额外安装FTP服务。
sftp连接服务器命令怎么敲才不容易出错
敲命令看似简单,但翻车概率不低,很多新手连不上,往往不是服务器问题,而是漏了端口或者写错用户名,所以我把前期准备和命令写法拆开讲。
先把三样信息凑齐
- 服务器IP地址:形如
45.67.89,也可以是域名。 - 登录用户名:比如
root,或者云服务商给的ubuntu、centos。 - SSH端口:默认是22,但不少管理员为了安全改成了其他端口,比如
2222。
这三样缺一不可,尤其是端口,如果你用默认22去连一个改了端口的服务器,大概率会报“Connection refused”或“Connection timed out”。
一条命令通吃Linux和macOS
在Linux终端或macOS的Terminal里,连sftp的写法非常直白:
sftp root@123.45.67.89
回车后,系统提示你输入密码,密码输入时是不显示的,这很正常,别慌。
如果服务器端口改成了2222,就要用大写-P参数:
sftp -P 2222 root@123.45.67.89
注意这里的大写P,很多朋友栽在它头上,小写-p在sftp里是保留给本地端口用的,跟FTP里的小写p完全不是一回事。
Windows用户怎么连?
Windows 10及以上版本自带了OpenSSH,PowerShell或CMD里直接敲同样的命令就能用,不过Windows的终端体验不如类Unix系统,复制粘贴文件名时偶尔会出幺蛾子。
更省心的方式是图形工具,比如WinSCP或FileZilla,填好主机、用户名、密码、端口这四样,点连接就完事了,WinSCP对sftp的优化尤其好,切目录、拖文件都利索。
sftp连接超时怎么办?先查这四个地方
超时是最让人烦躁的报错,没有之一,别急着怀疑服务器宕机,按顺序排查,大多数情况都能解决。
第一查:本机到服务器的网络通不通
先用ping试试服务器IP,如果完全丢包,说明链路可能断了,不过有些服务器禁ping,ping不通不代表连不上。
更靠谱的方法是测试端口:
telnet 123.45.67.89 22
如果端口通,你会看到类似SSH-2.0-OpenSSH的版本信息字符串,如果卡住不动或者直接拒绝,那就是端口访问有问题。
第二查:服务器的SSH服务是否在运行
SSH服务在Linux上叫sshd,如果你有权限登录服务器,执行:
systemctl status sshd
看到active (running)就说明服务活着,如果显示没有运行,启动它:
systemctl start sshd
第三查:云安全组和防火墙规则
这是超时问题的重灾区,云服务器除了系统内部的firewalld或iptables,还有云控制台的安全组规则,行业共识认为,连接超时最常见的原因就是安全组入方向没放行22端口,你必须在云服务商控制台里,找到服务器实例的安全组,添加入方向规则,允许TCP端口22,这一步漏了,本地测试做得再漂亮也白搭。
第四查:是不是被防暴力破解拉黑了
不少服务器装了fail2ban这类工具,连续输错密码几次,IP就会被拉黑一段时间,如果刚才疯狂试密码,歇几分钟再试可能就恢复了。
图形化工具连接sftp,到底比命令行强在哪
命令行适合批量操作,但图形界面适合看文件结构,尤其是处理一堆图片或日志时,能用鼠标拖拽就绝不打字。
免费工具完全够用
- FileZilla:跨平台老牌工具,免费开源,支持sftp、ftp、ftps。
- WinSCP:Windows专属,界面简洁,支持目录同步,个人免费。
- Termius:macOS和Windows都能用,好看,但部分高级功能要付费订阅。
价格方面,免费版的FileZilla和WinSCP已经能覆盖绝大多数日常需求,付费工具主要是强在界面体验和多设备同步,不差钱可以上。
填对四个字段就成功
不管你用哪个工具,连接面板里无非就是主机、用户名、密码、端口四个输入框,把刚才准备的三样信息填好,端口填22或实际端口,点击连接,第一次连的时候可能会弹一个主机密钥确认框,直接确认就行。
哪种方式适合你?
如果你只是偶尔传一个安装包,命令行足够,如果你要每天上传下载大量文件,图形工具更省力,不少运维老手其实是两者结合:命令行写脚本批量同步,图形工具手动看目录。
sftp和ftp有什么区别?为什么越来越多人只用sftp
很多教程喜欢罗列一堆技术参数,我直接说人话。
传输机制不一样
FTP是明文传输,账号密码和文件内容在网络里裸奔,抓包工具一截就看到了。sftp是SSH加密通道,数据被加密包裹,即使被截获也读不出真实内容,在安全性上,sftp几乎碾压。
服务依赖不同
FTP默认用21端口,需要单独装vsftpd或pure-ftpd等软件,还要处理主动被动模式,sftp直接复用SSH服务,一台Linux服务器只要开了SSH,天然就支持sftp,无需额外安装。
防火墙体验差距大
FTP的主动和被动模式经常导致防火墙配置困惑有时候能连上但列不出目录,折腾半天,sftp没有这种模式之争,只要SSH端口通,sftp就通。
速度有没有差距?
大文件传输时,FTP理论上比sftp略快,因为加密有开销,但多数场景下这点差距感知不明显,安全优先的思路下,sftp付出的那一点点速度代价非常值得。
sftp登录成功后,这组命令让你像本地一样操作远程文件
连上之后,你就进入了一个类Linux命令行环境,常用命令不多,我按场景说。
浏览远程目录
pwd查看当前远程目录ls列出远程文件cd切换远程目录
传文件
get 文件名把远程文件下载到本地当前目录put 文件名把本地文件上传到远程当前目录get -r 目录名递归下载整个目录put -r 目录名递归上传整个目录
注意,sftp里上传和下载没有方向性提示,全靠你自己区分get是从远程拿,put是往远程推。
操作远程文件
mkdir 目录名新建远程目录rm 文件名删除远程文件rmdir 目录名删除远程空目录
处理本地路径
lpwd查看本地当前目录lcd 路径切换本地目录
这个点特别容易忽略,你输入get file.log,文件其实下载到了你本地终端当前所在目录,而不是下载文件夹,想落到固定位置,先lcd切过去。
进阶:用密钥登录sftp,免密且更安全
如果你每天都要连服务器,输入密码会越来越烦,而且密码登录本身也有被暴力破解的风险,SSH密钥登录可以一劳永逸。
生成密钥对
在本机终端执行:
ssh-keygen -t rsa -b 4096
一路回车,会在~/.ssh目录生成id_rsa(私钥)和id_rsa.pub(公钥)。
然后上传公钥到服务器:
ssh-copy-id root@123.45.67.89
输入一次密码,公钥就会追加到服务器的authorized_keys文件里,下次再连sftp,直接免密登录。
修改端口后别忘了同步
如果服务器SSH端口不是22,那你生成了密钥也一样要带-P参数连。
sftp -P 2222 root@123.45.67.89
这个细节坑过不少人,以为配了密钥就可以高枕无忧,结果换台服务器又连不上。
常见问题排查:连接不上、连接慢、连接断
连接慢得像蜗牛
输入命令后要卡好几秒才提示输密码,多半是SSH在做DNS反向解析,在服务器上编辑/etc/ssh/sshd_config,把UseDNS设为no,重启sshd服务,基本上立刻变快。
连接断断续续
网络环境切换时,sftp会话容易断开,连接时加一个心跳参数:
sftp -o ServerAliveInterval=60 root@123.45.67.89
这样客户端每60秒发一个心跳,保持会话不失效。
密码明明正确却连不上
检查一下密码里有没有特殊字符,&、,终端可能会自动转义,可以尝试在连接后用其他方式测试,或者临时改用密钥登录绕开问题。
Q&A:sftp相关疑问快问快答
sftp默认端口是多少?
sftp默认使用22端口,和SSH完全一致,如果连不上,先确认服务器SSH端口是否被改过。
sftp和scp有什么区别?
sftp是交互式文件传输协议,可以浏览目录、删除文件、批量操作,适合多步操作;scp是单次复制命令,适合一次性传文件,两者都基于SSH加密,但sftp更灵活,scp更适合写脚本。
sftp连接服务器命令中用户名能省略吗?
不能省略,sftp必须显式指定用户名,否则会默认使用当前登录的本地用户名,这往往不是服务器上的账号,会直接登录失败,建议每次连接都写完整:sftp 用户名@IP。
说到底,连接sftp就是一步:用SSH通道去搬运文件,把端口、用户名、IP三个参数记牢,再掌握几条基础命令,剩下的问题多半出在网络和权限上,一次连接看似简单,背后是十几年加密协议的沉淀,用sftp,就是选择了稳妥。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/706033.html




