我有一个Linux盒子,上面运行着一些python应用程序。 要求是允许该应用程序上的任何登录用户(用户存储在sqlite表中)能够SSH进入该框。
我试图使用libpam_sqlite
库here:
我已对/etc/pam.s/sshd
以及/etc/pam_conf
等进行了必要的更改。
/etc/pam.d/sshd
:
auth required pam_sqlite.so
account required pam_sqlite.so
password required pam_sqlite.so
/etc/pam_sqlite.conf
:
database = /etc/sysdb
table = account
user_column = user_name
pwd_column = user_password
expired_column = acc_expired
newtok_column = acc_new_pwreq
我在我的SQLite表中插入了一条包含用户和密码的新记录,但它失败了。
以下是/var/log/auth/log
的错误:
sshd[2496]: Invalid user timmy from 127.0.0.1
sshd[2496]: input_userauth_request: invalid user timmy [preauth]
sshd[2496]: Failed password for invalid user timmy from 127.0.0.1 port 52220 ssh2
sshd[2496]: Connection closed by 127.0.0.1 [preauth]
看起来好像SSH在通过SQLite tablle进行身份验证之前首先要检查用户是否存在于Linux Box上(我是对的吗?)
然后我在盒子上创建了一个新的Linux用户,其名称与SQLite表中的名称相同(但使用不同的密码)并再次尝试,发现它有效!
我也尝试了以下pam_listfile.so
,并发现如果系统上有相应的用户,它只会通过。 (或者我在某处出错了)
基本上,我的问题是,为了让SSH工作(ssh some_user@some_addr
),用户some_user
是否必须在some_addr
系统上存在?还是我错过了一些非常明显的东西?
如果是这样,有什么办法可以达到我的要求(没有多个SSH密钥)?
提前感谢所有帮助!