LabHub
学习 学习路径 课程

SSH 与文件传输

sshd 加固的顺序与验证

在 LabHub 中继续学习

一句话总结

更改sshd设置时,最重要的是不是输入什么值,而是以什么顺序确认。弄错了的话会锁住自己。

概念图: 不是输入什么值,而是以什么顺序确认 · 砍掉树枝 · 保持当前会话 · 语法

为什么需要这个?

修复远程服务器的sshd设置就像砍掉树枝一样。设置不正确的话,sshd不会出现,不出现的话就没有进入的方法。如果是没有控制台访问的云实例,可能需要重新生成整个实例。

所以有程序。

  1. 保持当前会话再打开一个新的终端
  2. 修改设置文件
  3. sshd -t检查语法
  4. 重新注册服务
  5. 请不要关闭现有会话在新的终端确认连接
  6. 只有确认结束后才会关闭现有会话。

跳过3号和5号的人真的很多。而且其中一部分在凌晨去数据中心。

怎么行动

有两个检查命令。

sshd -t                      # 문법만 검사
sshd -T | sort | head -40    # 실제 적용될 유효 설정 전체 출력
sshd -T -C user=deploy,host=10.0.3.14,addr=10.0.3.14 | grep -i 'passwordauth\|pubkey'

-t只看语法。-T显示了最终应用的值全部。这种差异重要的原因是最近发行版正在修改设置。

Include /etc/ssh/sshd_config.d/*.conf

**如果出现多次相同的键,sshd会使用第一个值。**所以Include如果在文件前面,碎片文件会赢,如果在后面,正文会赢。“明明改了,但还是吃不消”的一半就出自这里。-T通过确认的习惯可以阻止这个问题的发生。

推荐设置和各值的含义。

PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
ClientAliveInterval 300
ClientAliveCountMax 2
AllowGroups sshusers
X11Forwarding no
PermitEmptyPasswords no
LogLevel VERBOSE

Match用块创建例外。

Match Group sftponly
  ChrootDirectory /srv/sftp/%u
  ForceCommand internal-sftp
  AllowTcpForwarding no

Match如果条件符合的话,接下来Match我覆盖了文件末尾的设置。**如果相同的关键词在多个Match中满足,则只应用第一个。**顺序会改变结果,所以sshd -T -C ...必须进行验证。

在现场相遇的样子

**无法连接时的按层次诊断。**三个信息的区分是诊断的一半。

还有ssh -vvv阅读的诀窍。debug1: Connecting to如果不能到那里的话,就是网络问题,Offering public key下次Authentications that can continue如果重复,服务器就会拒绝该密钥。

锁上后不让自己锁上自己的方法

修改sshd设置的工作是能把自己推出去的少数工作。 遵守顺序的话,那个危险就会消失。

现在绝对不会断开会话。即使重新启动sshd,已经建立的连接也会保持。 所以在保留那个会话的情况下,在新窗口中尝试连接。如果成功的话,就把原来的会话 关闭,如果不行的话,会从原来的会话中恢复。

sshd -t                       # 문법 검사. 통과해야 재시작한다
systemctl reload sshd
ssh -o BatchMode=yes user@host true   # 다른 창에서

**一起看两个设置文件。**最近的发行版是/etc/ssh/sshd_config.d/*.conf 阅读后,**第一个出现的值获胜。**我修改了这个文件,如果不吃的话,请取消注册。 是在前面决定的。

sshd -T | grep -iE 'permitrootlogin|passwordauth|pubkeyauth|port'

sshd -T显示实际应用的值。比起读取文件,这个更准确。

**一次不犯错。**在关闭密码认证之前,所有人都可以用钥匙进入。 先确认有没有。如果不确认就关掉的话,从那一刻开始就会出现无法接听的人。 那个事实是在那个人需要的时候才知道的。

更换端口不是为了安全,而是为了减少噪音。虽然自动扫描日志减少了,但实际 不能阻止攻击。相反,用防火墙限制可以连接的出发地或 fail2ban重复阻止失败是有实效的。

真正价格高的三个是这些。

设置 效果
PasswordAuthentication no 不可以无差别地代入
PermitRootLogin no 还要弄清楚一个账号名。
AllowGroups ssh-users 新账户不会自动获得连接权限

确保对控制台的访问。可以进入云的串行控制台或IPMI吗? 提前确认。在只能通过ssh访问的服务器上安装sshd设置是没有退路的 成为工作

下次实习要做的事情

用drop-in设置文件硬编码sshd,sshd -tsshd -T通过验证。Match制作块,确认是否进行条件性应用,最后实际测试**是否仍然可以连接****密钥,是否拒绝密码认证。