重新映射 ssh 用户的 pam 模块

pam module to remap ssh users

我正在编写一个 ssh 模块,它从 ab ssh 用户获取用户名和密码,使用远程服务器对其进行身份验证,然后使用 pam_set_item 将每个远程用户重新映射到同一本地用户。我有 pam_module 可以完成所有这些。

但是,sshd 仍然调用 getpwnam 获取原始用户名(本地未知),并且登录失败。

我错过了什么?

我只是转述这个,因为我自己几分钟前偶然发现了它。它表明 OpenSSH 无法处理您正在尝试做的事情(即在 PAM 中更改用户名)。这是 2011 年的 post,但可以解释您所看到的内容。

there is really no code in openssh that would adjust the user name it obtained from the connection in its internal variables that store it and that's later used in other calls to system.

Original pam-list post

See also - bug report

我 运行 通过一种机制通过 libnss https://github.com/donapieppo/libnss-ato 的自定义扩展启用此行为 - 它将所有用户映射到某个预定义的用户。但是,(1) 您必须使用某种外部身份验证机制或您自己的 pam 模块来进行身份验证,(2) 配置此机制后,所有用户管理操作都将不起作用,(3) 如果您有多个交互式登录会话会话之间没有安全性。它对我来说很好,因为我不需要交互式登录。

此外,如果您更改 /etc/nsswitch,您可能需要重新启动系统才能生效。解决方法是安装 nscd 并在 nsswithch 更改后与 sshd 一起重新启动它。这是额外的麻烦,但它简化了调试。