我正在尝试使用Google 2FA解决scheme来保护出站服务器。
目前,我首先在本地的Vagrant机器上configuration所有的东西,一旦一切正常,我将在远程出站机器上运行Ansible。
我已经configuration/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组成员的用户可以在不提供任何密码的情况下login到本机,同时查看日志,我看到这些行:
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)
由于这是一个stream浪的机器,所以当我连接到机器进行testing时,我会运行:
ssh localhost -p 2222 -l username
并不是
vagrant ssh machine_name
我也尝试编辑/etc/ssh/sshd_config并将PermitRootLogin指令从“without-password”编辑为“no”,但无济于事。
我仍然可以自动login到机器,而无需提供任何密码。
当我从pam中的auth行删除“nullok”时,根本没有用户可以连接,给出的错误信息是:
Permission denied (publickey,keyboard-interactive).
还有一点值得一提的是,我的主机和我的Vagrant机器之间没有交换ssh-keys。
由于某种原因,不是gauth组成员的用户可以login到本机而不提供任何密码
你从PAM堆栈中删除了@include common-auth行,这需要正常的authentication。 如果我是对的,PAM会检查PAM堆栈中的所有authentication机制,如果其中一个“允许”连接(显然pam_google_authenticator.so nullok ),则允许连接。 知道PAMauthentication如何成功是超出了范围的。
我也尝试编辑
/etc/ssh/sshd_config并将PermitRootLogin指令从“without-password”编辑为“no”,但无济于事。
你试过root用户? 应该被拒绝。
当我从pam中的auth行删除“nullok”时,根本没有用户可以连接
在这种情况下,唯一的PAMauthentication方法是pam_google_authenticator.so ( required标志),如果失败。 你显然被拒绝了。
在这种情况下使用公钥应该工作。