密钥登录的原理
- 私钥(id_ed25519)
- 留在你自己电脑上,绝对不能外传。相当于你的身份证明。
- 公钥(id_ed25519.pub)
- 放到服务器上(追加到
~/.ssh/authorized_keys)。公开出去也没关系。 - 登录时
- 服务器用公钥出一道题,只有拿着对应私钥的人能答对——答对就放行,全程不传密码。
三步配好免密登录
$ ssh-keygen -t ed25519 -C "sunny@mac"
# 一路回车即可
# 保存位置默认 ~/.ssh/id_ed25519
# passphrase 可以留空(个人练习环境)
ed25519 是现在推荐的算法:更短、更快、更安全。老教程里的 ssh-keygen -t rsa 生成的密钥又长又慢,而且 RSA-1024 已经不安全了。
面试时说 ed25519,比说 rsa 显得跟得上。
$ ssh-copy-id devops@虚拟机IP
# 输一次密码,之后就不用了
$ ssh devops@虚拟机IP
# 不问密码,直接进去 → 成功
配不通?九成是权限
密钥登录失败,最常见的原因不是密钥不对,是权限太开。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 安全加固
$ 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,自动封禁多次失败的 IP。sudo dnf install -y epel-release fail2ban
$ sudo sshd -t ← 语法检查!Day 14 学的习惯
$ sudo systemctl restart 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
漏了任何一条都连不上。这题把这周三天的知识全串起来了。
几个日常技巧
# 在 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/目录/
第四周,你会了什么
- 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 挂着看拒绝原因。」
今天的练习
- 在你的 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 算出来对不上」的答案,能明显拉开和其他候选人的差距。