为了内网安全,将暴露在公网上的服务器禁用SSH密码登录。但这样一来,临时从没有密钥的机器上登录机器变成了一个难题。今天突然想到:能否针对不同的端口使用不同的认证方式?
基本想法是:暴露在公网的登录端口,例如2222,仅允许密钥登录;而内网SSH端口,默认是22,则可以使用密码登录。通过两种认证方式组合,既保障了服务器的安全,也方便随时从内网登录和管理。
要达到这个目的,一个自然想法是创建两个SSHD服务,监听不同的端口,并使用不同的认证方式。这种做法的弊端是升级时需要手动更新另一个实例的配置文件。
另一个更简便的做法是使用Match
指令:在SSHD的配置文件(默认是/etc/ssh/sshd_config
)文件末尾增加如下两行:
Match LocalPort 22 PasswordAuthentication yes
然后重启SSH服务:systemctl restart sshd
。接下来22端口便可以使用密码登录了。
使用Match
指令需注意两点:
Match
指令必须放置在文件最末尾,后续指令都受Match
影响,除非遇到文件结尾,或者新的Match指令(也就是说可以有多个Match
指令);-
Match
指令后的指令无需缩进,但缩进写法更容易阅读和理解,推荐使用。