所有用户只能使用密钥登录,除了 John,他可以使用密钥登录,如果他使用本地网络,192.168.1.x
那么他可以使用密码进行 ssh,但他不能使用随机 IP 的密码登录。
我不知道如何为 john 编写规则。我应该使用 AllowUsers 吗[email protected]
?但是如何拒绝来自不同 IP 的 John?如果 John 使用不同的端口连接会发生什么?
最好的方法是什么?
答案1
您应该能够使用Match
指令来做到这一点。
在你开始之前,确保您至少有一个帐户具有基于密钥的服务器访问权限(或物理访问)。
然后编辑服务器的/etc/ssh/sshd_config
文件,在末尾添加匹配块,例如
Match User john Address 192.168.1.0/24
PasswordAuthentication yes
请注意,这表达了两个条件,User john
和Address 192.168.1.0/24
,两个都必须满足才能PasswordAuthentication yes
应用0/24
。CIDR 表示法对于 192.168.1.x 子网中的任何地址。
现在,您可以在配置主体中禁用其他用户地址组合的密码验证,找到以下部分:
# Change to no to disable tunnelled clear text passwords
并改变默认设置
#PasswordAuthentication yes
到
PasswordAuthentication no
最后,重新启动服务 - 对于systemd
基于 init 的系统,你可以使用以下命令执行此操作
sudo systemctl restart ssh.service
您可以通过强制客户端尝试以下方法测试不匹配的用户是否无法再使用密码进行身份验证:
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
应该会失败并显示类似以下消息
Permission denied (publickey).
而john
应提示输入密码:
$ ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no [email protected]
[email protected]'s password:
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.4.0-116-generic x86_64)
如果你希望密码验证成为首选在本地网络上的机制john
,您可能需要在相应的客户端配置中指定该机制,即~/.ssh/ssh_config