我只想允许一个用户公开,即让人们无需输入密码或设置公钥即可登录。这是为了创建一个开放的 SSH 应用程序。它应该很简单,但似乎不起作用,这是我的 sshd_config:
UsePAM no
Match User app
X11Forwarding no
AllowTcpForwarding no
# PermitTTY no
PermitEmptyPasswords yes
AuthenticationMethods none
ForceCommand myapp
当我尝试以客户端身份 ssh 时,系统会提示我输入密码:
[email protected]'s password:
Permission denied, please try again.
我已经尝试过一些变化但没有运气。
谢谢。
答案1
初步说明
- 启动提升的 shell (
sudo -i
) 并保持其打开状态。如果出现问题,请使用提升的 shell 恢复更改。 - 制作
sudo cp -a …
您要修改的文件的副本 ( )。 - 最后确保您能够重新登录并
sudo
重新进行身份验证。然后才关闭升高的外壳。
解决方案 – 第 1 部分:/etc/ssh/sshd.conf
将您配置sshd
为使用 PAM 及其键盘交互式身份验证,而不是由其sshd
自身管理的密码身份验证。最简单的方法是无条件地为所有用户执行此操作。在/etc/ssh/sshd.conf
:
UsePAM yes
PasswordAuthentication no
KbdInteractiveAuthentication yes
#...
笔记:
使用每个参数的第一个获得的值。
ChallengeResponseAuthentication
是 的已弃用别名,因此请确保文件中KbdInteractiveAuthentication
没有较早的名称。ChallengeResponseAuthentication no
PasswordAuthentication
并KbdInteractiveAuthentication
可以放在 后面Match User …
,这样您就可以对用户进行键盘交互式身份验证app
,并对其他人进行常规密码身份验证;但UsePAM
它是全球性的。该片段可能如下所示:UsePAM yes Match User app PasswordAuthentication no KbdInteractiveAuthentication yes Match All PasswordAuthentication yes KbdInteractiveAuthentication no
sshd
修改文件后重新启动或重新加载(例如在Debian中sudo systemctl reload ssh.service
:)。
解决方案 – 第 2 部分:/etc/pam.d/common-auth
或/etc/pam.d/sshd
两种方法:
- 如果您想始终自动验证用户身份
app
,请修改/etc/pam.d/commmon-auth
. - 如果您只想在涉及
app
时自动验证用户身份,则修改但不修改。sshd
/etc/pam.d/sshd
/etc/pam.d/commmon-auth
在实践中,您应该修改/etc/pam.d/commmon-auth
或/etc/pam.d/sshd
。修改它们都太过分了。
解决方案 - 第 2a 部分:/etc/pam.d/common-auth
要将 PAM 配置为始终自动验证用户,请在包含in 的(已存在)行之前app
添加一行包含。该文件应如下所示:pam_succeed_if.so
pam_unix.so
/etc/pam.d/common-auth
# [...]
auth [success=2 default=ignore] pam_succeed_if.so user = app
auth [success=1 default=ignore] pam_unix.so nullok
# [...]
auth requisite pam_deny.so
# [...]
auth required pam_permit.so
# [...]
这是修改后的方法这个另一个答案,那里有解释。我放置在pam_succeed_if
第一位,因此用户app
无需经过处理(提示输入密码)即可进行身份验证pam_unix
。
app
无论什么工具请求身份验证,这都会自动对用户进行身份验证;例如其他用户将能够su app
自由地使用。如果您想app
仅在sshd
请求时自动验证用户身份,那么您需要修改/etc/pam.d/sshd
;继续阅读。
解决方案 - 第 2b 部分:/etc/pam.d/sshd
要将 PAM 配置为在涉及时自动对用户进行身份验证,请在 中(已存在)之前添加app
两行。文件的开头应如下所示:sshd
@include common-auth
/etc/pam.d/sshd
# [...]
auth [success=1 default=ignore] pam_succeed_if.so user != app
auth sufficient pam_permit.so
# Standard Un*x authentication.
@include common-auth
# [...]
[...]