第2章 远程连接与文件传输:SSH协议原理、使用Xshell/MobaXterm连接服务器、SCP与Rsync命令详解、配置密钥登录
说实话,很多新手运维拿到服务器第一件事就是问:「我该怎么连上去?」
这个问题看似简单,但背后藏着不少坑。我见过太多人因为SSH配置不当,导致服务器被暴力破解,或者因为文件传输选错工具,白白浪费几个小时。
今天咱们就把这块彻底讲透。
2.1 SSH协议原理:你每次连接都在做什么?
SSH,全称Secure Shell,说白了就是「安全的远程登录协议」。它替代了早年间的Telnet——那玩意儿是明文传输,密码直接裸奔在网络上,想想都后怕。
SSH的核心机制是「加密隧道」。你每次敲下ssh root@192.168.1.100,背后其实发生了三件事:
- 版本协商:客户端和服务端互相确认SSH版本(目前主流是SSH-2.0)
- 密钥交换:用Diffie-Hellman算法生成一个临时会话密钥,保证后续通信加密
- 用户认证:密码登录或密钥登录,验证你的身份
重点记住:SSH默认端口是22。如果你把服务器暴露在公网上,我强烈建议你改掉这个端口——别问为什么,问就是被扫过。
我个人习惯是,拿到新服务器第一件事:vim /etc/ssh/sshd_config,把Port改成五位数,比如22222。然后重启sshd服务。这样能过滤掉99%的自动扫描脚本。
2.2 使用Xshell/MobaXterm连接服务器
工欲善其事,必先利其器。Windows下我常用的两款工具:Xshell和MobaXterm。
2.2.1 Xshell:老牌稳定派
Xshell是NetSarang公司的产品,个人免费。它的特点是轻量、稳定、会话管理做得特别好。
基本配置步骤:
- 打开Xshell,点击「新建」
- 填写主机IP,端口号(默认22,如果你改了就用新端口)
- 协议选SSH,点击「用户身份验证」
- 输入用户名和密码(或者后面配置密钥登录)
- 点击「连接」,搞定
小技巧:Xshell支持「快速命令」功能。我经常把常用的命令(比如tail -f /var/log/messages)存成按钮,一键执行,省时省力。
2.2.2 MobaXterm:全能选手
MobaXterm是我现在的主力。它内置了X11转发、FTP/SFTP文件管理、甚至还有个简易的文本编辑器。说白了,一个工具搞定所有远程工作。
它的亮点:
- 内置文件管理器:左侧直接拖拽上传下载,不用额外开SFTP客户端
- 多标签页:同时连多台服务器,切换方便
- 宏录制:重复操作可以录成宏,一键回放
我记得有一次排查线上问题,需要同时看4台服务器的日志。用MobaXterm开了4个标签页,每个窗口执行tail -f,对比着看,问题很快就定位到了。
2.3 SCP与Rsync命令详解
文件传输是运维的日常。SCP和Rsync是我最常用的两个命令,但它们的适用场景完全不同。
2.3.1 SCP:简单粗暴
SCP基于SSH协议,用法和cp几乎一样,只是多了个远程路径。
# 从本地推送到远程
scp /path/to/local/file user@remote:/path/to/remote/
# 从远程拉取到本地
scp user@remote:/path/to/remote/file /path/to/local/
# 递归传输目录
scp -r /path/to/local/dir user@remote:/path/to/remote/
SCP的优点:简单、安全。缺点:不支持增量传输,每次都是全量覆盖。如果你传一个大文件,哪怕只改了一行,也得重新传一遍。
注意:SCP在传输大量小文件时效率很低。我曾经用SCP传一个包含10万个小文件的目录,结果跑了快两个小时还没完。后来换成Rsync,十分钟搞定。
2.3.2 Rsync:增量同步神器
Rsync的核心优势是「增量传输」。它只传输文件变化的部分,而不是整个文件。
# 基本用法(类似SCP)
rsync -avz /path/to/local/dir user@remote:/path/to/remote/
# 参数说明
# -a:归档模式,保留权限、时间戳等属性
# -v:显示详细信息
# -z:传输时压缩,节省带宽
Rsync还有一个杀手锏:断点续传。如果你传一个大文件到一半网络断了,重新执行同样的命令,它会从断点处继续,而不是从头开始。
我个人的使用习惯:
- 小文件、一次性传输:用SCP,简单直接
- 大文件、频繁同步:用Rsync,省时省带宽
- 定时备份:用Rsync配合crontab,每天增量同步一次
2.4 配置密钥登录:告别密码
密码登录有两个致命问题:一是容易被暴力破解,二是每次都要输密码,烦不烦?
密钥登录的原理很简单:你生成一对密钥——公钥和私钥。公钥放在服务器上,私钥自己保管。登录时,服务器用公钥验证你的私钥,匹配就放行。
2.4.1 生成密钥对
# 在本地机器上执行
ssh-keygen -t rsa -b 4096
# 一路回车,默认保存在 ~/.ssh/id_rsa(私钥)和 ~/.ssh/id_rsa.pub(公钥)
这里我建议用4096位密钥,2048位虽然也安全,但4096更稳妥。别嫌慢,生成一次以后用很多年。
2.4.2 将公钥部署到服务器
# 方法一:使用ssh-copy-id(推荐)
ssh-copy-id user@remote
# 方法二:手动追加
cat ~/.ssh/id_rsa.pub | ssh user@remote "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
执行完后,再登录就不需要密码了。如果还提示输密码,检查一下服务器上~/.ssh目录的权限:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
避坑指南:我曾经遇到过一个问题——密钥配置好了,但登录时还是提示「Permission denied」。排查了半天,发现是服务器上/etc/ssh/sshd_config里有一行PubkeyAuthentication no。改成yes,重启sshd服务,问题解决。
2.4.3 禁用密码登录(生产环境建议)
密钥登录确认没问题后,可以彻底禁用密码登录,提升安全性。
# 编辑 /etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
# 重启sshd服务
systemctl restart sshd
警告:在禁用密码登录之前,务必确认密钥登录已经配置成功并且能正常使用。否则你可能会把自己锁在服务器外面——别问我怎么知道的。
2.5 本章小结
远程连接和文件传输是运维的基本功,但基本功往往最容易被忽视。我见过太多人用默认配置、用弱密码、用SCP传大文件等到半夜。
记住几个要点:
- SSH端口能改就改,不能改就做好fail2ban防护
- 小文件用SCP,大文件用Rsync
- 密钥登录是标配,密码登录是隐患
把这些基础打牢了,后面的部署工作才能顺风顺水。