讲解
SSH 是远程管理 Linux 服务器的标准协议,加密传输、默认 22 端口。登录命令是 ssh 用户名@服务器地址,首次连接会显示服务器指纹并询问 yes/no——这是防止中间人攻击的机制,输入 yes 后指纹存入 ~/.ssh/known_hosts,以后再连同一台机器就不再询问;如果哪天突然弹出指纹变更的警告,要警惕而不是习惯性 yes。
密码登录之外更推荐密钥登录:ssh-keygen 生成一对密钥,私钥留在本机(~/.ssh/,权限必须严格),公钥放到服务器的 ~/.ssh/authorized_keys 里,之后登录免密码且更安全。ssh-keygen -t ed25519 是当前的推荐算法。服务器多的话,在 ~/.ssh/config 里给每台机器起别名,之后 ssh 别名 即可,还能指定端口和密钥文件。
传文件用 scp(基于 SSH 的复制):scp 本地文件 用户@服务器:远程路径 上传,方向反过来就是下载,加 -r 传目录。更强大的替代品是 rsync -avz:增量传输,只同步变化的部分,中断后还能续传,适合大目录和定期备份。图形化工具如 FileZilla 走 SFTP 协议,底层同样是 SSH。
示例
密钥相关操作在本机就能完成,动手生成一对试试:
# 在家目录下准备 .ssh 目录(权限 700:只有自己能进)
mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"
# 生成一对 ed25519 密钥(-N "" 表示不设私钥密码,仅练习用)
ssh-keygen -t ed25519 -N "" -q -f "$HOME/.ssh/demo_key"
# 私钥 600、公钥 644,权限不对 ssh 会拒绝使用
ls -l "$HOME/.ssh"
# 查看本机 ssh 版本
ssh -V
以下命令需要一台真实服务器,仅作演示:
# 仅示意:登录服务器(首次连接会询问指纹,核对后输入 yes)
ssh alice@203.0.113.10
# 仅示意:~/.ssh/config 里配置别名后,ssh myserver 即可登录
# Host myserver
# HostName 203.0.113.10
# User alice
# IdentityFile ~/.ssh/demo_key
# 仅示意:上传文件到服务器家目录;加 -r 传目录
scp report.pdf alice@203.0.113.10:~/
# 仅示意:rsync 增量同步本地目录到服务器
rsync -avz ./dist/ alice@203.0.113.10:/var/www/site/
常见坑
- 私钥权限太开放:~/.ssh 要 700、私钥要 600,否则 ssh 直接报 WARNING: UNPROTECTED PRIVATE KEY FILE 并拒绝使用。
- 指纹变更无脑 yes:服务器重装系统会换指纹(正常),但前请先跟运维确认——这也可能是中间人攻击。
- scp 传目录忘加 -r:报错 not a regular file。
- 把私钥传到服务器:私钥永远不离开本机,服务器上只放公钥(authorized_keys)。
小结
ssh 登录、ssh-keygen 做密钥、~/.ssh/config 起别名、scp 传文件、rsync 做增量同步。下一节学习命令行里的网络请求:wget 与 curl。