I am LAZY bones? AN ancient AND boring SITE

2009年 09月 11日 的归档

使用了ecryptfs的情况下,ssh的publickey登陆无效的解决办法

eCryptfs – Enterprise Cryptographic Filesystem 是linux下一个企业级的磁盘加密系统。
使用这个系统,可以使得用户的文件只有在用户登陆以后才是可见的,这样,即使你的硬盘被人偷走了,只要的你的密码足够安全不被破解,人家也无法读取你的私人文件(CGX真该用这个啊)。
目前,ubuntu 9.04 server 在安装时,已经可以选择用eCryptfs来加密用户的家目录了。
今天我装服务器的时候,觉得这个挺好玩的,就顺便启用了,却导致了一点点小问题,如下:
我在装好服务器openssh-server以后,很自然就把我的公钥复制到服务器上,来减少我输入密码的麻烦。没想到,登出了以后,再登进来时,原本应该不用密码的,却还提示我输入密码。后来还发现,只要有一个用密码登陆成功了以后,其他termianl再登陆的时候,就是正常的。于是想到可能就是 eCryptfs 搞的鬼,放google一搜,果然是的,已经有先例了。
那bug里解决办法也有了,我再贴一下:
方法一:

 $ /sbin/umount.ecryptfs_private
 $ cd $HOME
 $ chmod 700 .
 $ mkdir -m 700 .ssh
 $ chmod 500 .
 $ echo $YOUR_REAL_PUBLIC_KEY > .ssh/authorized_keys
 $ /sbin/mount.ecryptfs_private

这样就可以把你的公钥加到服务器的还未解锁的家目录下了。ssh的鉴权自然也可以顺利通过了。

方法二:
修改服务器的 /etc/ssh/sshd_config 把authorized_keys放到用户家目录以外的地方,以避开此问题。
例如加上:

AuthorizedKeysFile /etc/.ssh/%u/authorized_keys

延伸阅读:另一起SSH服务器端不认RSA公钥的故障