Linux 容器可以使用我的主目录之外的 authorized_keys 文件,但基于该文件的临时容器却不能。为什么?

Linux 容器可以使用我的主目录之外的 authorized_keys 文件,但基于该文件的临时容器却不能。为什么?

在 Ubuntu 12.10 中,我使用 lxc-create 实用程序创建了类型为“ubuntu”的 LXC。然后,我使用 lxc-start-ephemeral 实用程序基于此容器创建临时容器,并且我需要使用无密码 ssh 连接到这些容器。但是,我需要保持它们的 /home/ubuntu 文件夹完好无损,因此我不能将常用的 .ssh/authorized_keys 文件放入其中。

“加密主目录”部分这里告诉我如何将 authorized_keys 移出主目录。在我从基础容器内部按照这些说明操作后,我可以通过 ssh 进入基础容器而无需输入密码。

但是,当我从基础容器启动临时容器时,没有密码就无法 ssh 进入。(令人困惑的是,无密码 ssh 到临时容器当 authorized_keys 位于 /home/ubuntu/.ssh 中的正常位置时可以工作。)我该如何解决这个问题?

以下是 ssh -v 从接受主机密钥时开始显示的内容:

debug1: ssh_ecdsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/ubuntu/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/ubuntu/.ssh/id_dsa
debug1: Trying private key: /home/ubuntu/.ssh/id_ecdsa
debug1: Next authentication method: password

以下是临时容器中 /var/log/auth.log 的相关部分:

Apr 11 00:06:52 test-temp-SNeWevO sshd[306]: Authentication refused: bad ownership or modes for directory /
Apr 11 00:06:54 test-temp-SNeWevO sshd[306]: Accepted password for ubuntu from 10.0.3.1 port 59677 ssh2
Apr 11 00:06:54 test-temp-SNeWevO sshd[306]: pam_env(sshd:setcred): Unable to open env file: /etc/default/locale: No such file or directory
Apr 11 00:06:54 test-temp-SNeWevO sshd[306]: pam_unix(sshd:session): session opened for user ubuntu by (uid=0)

我在基于标准 Ubuntu 12.10 AMI 的全新 AWS 微型实例上进行了此测试,如果有帮助的话,可以提供有关如何重现它的详细说明。

答案1

这是一个老问题,但它仍然出现在谷歌上......

Authentication refused: bad ownership or modes for directory /

是由于 sshd 服务对 authorized_keys 所在的目录有严格的权限要求造成的,不确定您是如何设法使其成为根目录 (/) 的,大概与您配置容器的方式有关。

如果您无法更改 / 的权限(在这种情况下似乎有可能),您可以设置

StrictModes no

在 sshd_config 中。
只要您没有多个用户访问服务器,这样做对安全性的影响就很小。

相关内容