我目前正在使用
auth required pam_unix.so try_first_pass nullok
auth optional pam_ssh.so use_first_pass
Run Code Online (Sandbox Code Playgroud)
(加上 Arch Linux 默认添加的其他一些可能不相关的条目),这意味着我的登录密码也用于尝试解锁任何存储(或链接到)的 ssh 密钥,~/.ssh/login-keys.d/
感谢pam_ssh(我也可以使用它try_first_pass
来代替密码提示不应该通过我的登录密码解锁 ssh 密钥)。
只要 SSH 密钥密码与登录密码相同,此方法就可以正常工作。不过,我会想实现的是,我基本上可以用两种方法之一登录不同的密码-无论是我的登录一个或SSH密钥之一。
所以我认为pam_ssh
应该首先尝试解锁我的 SSH 密钥,并且只有在失败时才pam_unix
需要,否则应该跳过。这可以以某种方式实现吗?
起初我认为解决方案在于pam_ssh
先放,但另外它必须被制作sufficient
而不是optional
:
auth sufficient pam_ssh.so try_first_pass
auth required pam_unix.so try_first_pass nullok
Run Code Online (Sandbox Code Playgroud)
但是,在实际文件中,后面还有一些其他required
行,例如,现在将被忽略!那么我怎样才能真正解决这个问题呢? required pam_unix.so
required pam_env.so
感谢另外两篇 SE 帖子(一篇在 SO 上,一篇在 SF 上),答案在于使用高级control
语法。这
auth required pam_unix.so try_first_pass nullok
# and sometime later
auth optional pam_ssh.so use_first_pass
Run Code Online (Sandbox Code Playgroud)
因此应该成为
auth [success=1 new_authtok_reqd=1 ignore=ignore default=ignore] pam_unix.so try_first_pass nullok
auth required pam_ssh.so use_first_pass
Run Code Online (Sandbox Code Playgroud)
现在,该pam_ssh
行必须正好位于该行之前pam_unix
,因为这success=N
意味着跳过N
后面的模块。
另外,不要忘记session pam_ssh.so
排队!
在我的第一次尝试中,我使用了
auth [success=1 default=ignore] pam_ssh.so try_first_pass
auth required pam_unix.so use_first_pass nullok
Run Code Online (Sandbox Code Playgroud)
相反,但这种方法会锁定所有没有 SSH 密钥的用户!事实证明这default=ignore
还不够,auth_err=ignore
必须添加,因为这显然不被视为default
. 此外,这种尝试意味着根据用户是否拥有SSH 密钥,将出现“密码”或“SSH 密码”提示!
请注意,在 Arch Linux 中,所pam_unix
使用的行login
位于include
链中
login -> system-local-login -> system-login -> system-auth
Run Code Online (Sandbox Code Playgroud)
而system-login
有一些其他的required
之前,包括system-auth
,所以你不能简单地把auth [success=1 default=ignore] pam_ssh.so try_first_pass
之前login
的auth include system-local-login
-你会跳过错误的required
,并感谢pam_unix.so use_first_pass
(而不是try_first_pass
),你仍然可以只与您的登录密码登录!另一方面,通过修改system-auth
,您还允许其他服务,例如sshd
使用您的 SSH 密钥作为登录密码的身份验证选项。如果你真的只想你login
使用它,你必须打破include
链并手动将所有auth
s复制到login
.
归档时间: |
|
查看次数: |
3217 次 |
最近记录: |