← 回目录
20 Week 04 · 网络排查 · 收尾

SSH 和密钥登录

运维每天都在用的东西。密钥登录不只是方便——它是后面学 Ansible 的前提,也是服务器加固的第一步。

密钥登录的原理

一句话说清
一对钥匙,各管一边
私钥(id_ed25519)
留在你自己电脑上,绝对不能外传。相当于你的身份证明。
公钥(id_ed25519.pub)
放到服务器上(追加到 ~/.ssh/authorized_keys)。公开出去也没关系。
登录时
服务器用公钥出一道题,只有拿着对应私钥的人能答对——答对就放行,全程不传密码。

三步配好免密登录

① 在你的 Mac 上生成密钥
$ ssh-keygen -t ed25519 -C "sunny@mac"
# 一路回车即可
# 保存位置默认 ~/.ssh/id_ed25519
# passphrase 可以留空(个人练习环境)
为什么用 ed25519 不用 rsa

ed25519现在推荐的算法:更短、更快、更安全。老教程里的 ssh-keygen -t rsa 生成的密钥又长又慢,而且 RSA-1024 已经不安全了。

面试时说 ed25519,比说 rsa 显得跟得上。

② 把公钥送到服务器
$ ssh-copy-id devops@虚拟机IP
# 输一次密码,之后就不用了
③ 验证
$ ssh devops@虚拟机IP
# 不问密码,直接进去 → 成功

配不通?九成是权限

Day 06 埋的伏笔

密钥登录失败,最常见的原因不是密钥不对,是权限太开。SSH 对权限的要求非常严格,稍微松一点它就拒绝工作:

服务器上这几个权限必须严格
~ (家目录)
不能有 组写其他人写 权限。755 或更严。
~/.ssh
必须 700——只有属主能进。
~/.ssh/authorized_keys
必须 600——只有属主能读写。
私钥(在你自己电脑上)
必须 600,否则 ssh 直接报 too open 拒绝使用。
一次性修好
# 在服务器上
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 755 ~

# 在你的 Mac 上
$ chmod 600 ~/.ssh/id_ed25519
排查密钥登录的正确姿势

连不上时加 -v 看详细过程:ssh -v devops@IP

输出里会明确写出它试了哪个密钥、被拒绝在哪一步。比瞎猜快得多。

还有一招:在服务器上开 sudo journalctl -u sshd -f,然后从 Mac 发起连接,拒绝原因会实时打出来——这就是 Day 03 学的两窗口姿势。

sshd 安全加固

四条,面试常问
改配置前先备份(Day 02 的规矩)
$ sudo cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
$ sudo vi /etc/ssh/sshd_config
四项加固
PermitRootLogin no
禁止 root 直接登录。攻击者知道 root 一定存在,禁掉等于让他们连用户名都得猜。
PasswordAuthentication no
只允许密钥登录,关闭密码。爆破直接失效。⚠️ 改这条之前一定要先确认密钥能登进去!
Port 2222
改掉默认 22 端口。挡不住有心人,但能过滤掉 99% 的自动化扫描。改完记得防火墙放行新端口,还要处理 SELinux。
fail2ban
装个 fail2ban自动封禁多次失败的 IPsudo dnf install -y epel-release fail2ban
改完必须做这两步
$ sudo sshd -t                    ← 语法检查!Day 14 学的习惯
$ sudo systemctl restart sshd
⚠️ 改 sshd 配置的保命规则

永远别关掉你正在用的那个连接。正确做法:

① 保持当前 SSH 连接不断② 改配置、重启 sshd③ 开一个新窗口测试能不能登进来④ 新连接成功了,再关掉旧的。

万一配错了,旧连接还在,你还能改回来。关早了就只能去机房了。

改端口要连着做三件事

①改 sshd_config 的 Port ②防火墙放行 firewall-cmd --add-port=2222/tcp --permanent && --reload ③SELinux 放行 semanage port -a -t ssh_port_t -p tcp 2222

漏了任何一条都连不上。这题把这周三天的知识全串起来了。

几个日常技巧

config 文件,省掉记 IP
# 在 Mac 上编辑 ~/.ssh/config
Host rocky
    HostName 10.211.55.7
    User devops
    Port 22

# 之后直接:
$ ssh rocky
传文件
$ scp 本地文件 devops@IP:/tmp/       # 传上去
$ scp devops@IP:/tmp/文件 ./         # 拉下来
$ scp -r 本地目录 devops@IP:/tmp/    # -r 传目录

# 大量文件用 rsync 更好(断点续传、只传差异)
$ rsync -avz 本地目录/ devops@IP:/tmp/目录/

第四周,你会了什么

网络这块的地基
Week 04 · 网络排查
Day 16
ip a / ip route / nmcli,以及"上不了网"的由近到远五步。
Day 17
ss -tunlp监听地址 0.0.0.0 vs 127.0.0.1
Day 18
firewalld,以及那道标准题的三层排查法
Day 19
SELinux——红帽系特色,别答"直接关掉"
Day 20
SSH 密钥登录 + 加固四条。

今天的面试点

「服务器安全怎么加固?」

一口气说四条:「禁止 root 直接登录、只用密钥不用密码、改掉默认 22 端口、装 fail2ban 自动封禁爆破 IP。」

再补一句实操细节会更好:「改 sshd 配置我一定保留着当前连接,用新窗口验证能登进去之后再关旧的——万一配错了还有退路。」

「密钥登录配不通,怎么查?」

先看权限——.ssh 必须 700、authorized_keys 必须 600、私钥 600,SSH 对这个要求很严,太开它直接拒绝。」

「然后 ssh -v 看详细握手过程,或者在服务端 journalctl -u sshd -f 挂着看拒绝原因。」

今天的练习

敲完再走 · 约 15 分钟
  • 在你的 Mac 上ssh-keygen -t ed25519 生成密钥(如果已有就跳过)
  • ssh-copy-id devops@虚拟机IP,然后 ssh devops@虚拟机IP 验证免密成功
  • 在虚拟机上 ls -ld ~/.ssh && ls -l ~/.ssh/authorized_keys,确认是 700 和 600
  • 故意搞坏再修chmod 777 ~/.ssh → 从 Mac 再登一次(会失败)→ ssh -v 看报错 → chmod 700 修回来
  • 配一个 ~/.ssh/config,之后用 ssh rocky 直接登
  • 选做:改 sshd_config 禁 root 登录,sshd -t 检查后重启,保留旧连接用新窗口验证
下周预告

Week 05 讲磁盘与软件:磁盘满了怎么办、挂载新盘、LVM 在线扩容(面试高频)、dnf、定时任务。

第 21 天那个「df 显示满了但 du 算出来对不上」的答案,能明显拉开和其他候选人的差距。