讲解

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。