服务器允许无需提供密码即可登录,并且没有交换 ssh 密钥,可能是什么原因?

服务器允许无需提供密码即可登录,并且没有交换 ssh 密钥,可能是什么原因?

我正在尝试使用 Google 2FA 解决方案保护出站服务器的安全。

目前,我首先在本地 Vagrant 机器上配置所有内容,一旦一切按预期工作,我将在远程出站机器上将其作为 Ansible 剧本运行。

我已/etc/ssh/sshd_config这样配置:

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 1024
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication yes
PasswordAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes
Match User rescue
    AuthenticationMethods publickey
Match Group gauth
    AuthenticationMethods publickey,keyboard-interactive

就像/etc/pam.d/sshd这样:

auth required pam_google_authenticator.so nullok
account    required     pam_nologin.so
@include common-account
session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_keyinit.so force revoke
@include common-session
session    optional     pam_motd.so  motd=/run/motd.dynamic noupdate
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so
session    required     pam_env.so # [1]
session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
session [success=ok ignore=ignore module_unknown=ignore default=bad]        pam_selinux.so open
@include common-password

由于某种原因,不属于该gauth组成员的用户无需提供任何密码即可登录机器,查看日志时,我看到以下几行:

Jun 15 13:35:57 vagrant-ubuntu-trusty-64 sshd[9836]: Accepted keyboard-interactive/pam for ubuntu from 10.0.2.2 port 55495 ssh2
Jun 15 13:35:57 vagrant-ubuntu-trusty-64 sshd[9836]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)

因为它是一台流浪机器,所以值得一提的是,当我连接到机器进行测试时,我运行:

ssh localhost -p 2222 -l username

并不是

vagrant ssh machine_name

我也尝试过编辑/etc/ssh/sshd_config和修改 PermitRootLogin 指令,将“无密码”改为“无”,但无济于事。

我仍然可以自动登录到机器,而无需提供任何密码。

当我从 pam 中的 auth 行中删除“nullok”时,根本没有用户可以连接,并且给出的错误消息是:

Permission denied (publickey,keyboard-interactive).

还有一件值得一提的事情是,我的主机和 Vagrant 机器之间没有交换 ssh 密钥。

答案1

由于某种原因,不属于 gauth 组的用户无需提供任何密码即可登录机器

您在开始时从 PAM 堆栈@include common-auth行中删除了负责正常身份验证的内容。如果我没记错的话,PAM 会检查 PAM 堆栈中的所有身份验证机制,如果其中一个“允许”连接(pam_google_authenticator.so nullok显然允许),则允许连接。了解 PAM 身份验证如何成功超出了 openssh 的范围。

我也尝试过编辑/etc/ssh/sshd_config并将PermitRootLogin指令从“无密码”改为“无”,但无济于事。

您尝试过root用户吗?应该会被拒绝。

当我从 pam 中的 auth 行中删除“nullok”时,任何用户都无法连接

在这种情况下,唯一的 PAM 身份验证方法是pam_google_authenticator.so(带标志required),如果失败。你显然会被拒绝。

但在这种情况下使用公钥应该可以起作用。

相关内容