SSH通过authorized_keys连接到带有加密homedir的Ubuntu系统?


38

我最近使用Ubuntu karmic 9.10设置了新服务器,当我创建主目录时,我选择对其进行加密。现在,将我的authorized_keys文件加载到〜/ .ssh后,由于在登录后才解密我的主目录,因此无法识别。是否有办法使SSH密钥在Ubuntu下与加密的主目录一起使用?


欢迎使用更好的标签建议,但在建议的标签中找不到真正匹配的内容。
乔什(Josh)

1
我认为这些确实存在。有一个ubuntu标签,但我不认为此问题特定于任何特定的操作系统。
奎克吉x德09年

在Ubuntu 11.10中,这个问题的症状是我第一次尝试使用ssh进入计算机是因为要求密码验证(因为authorized_keys尚无法访问)。如果我启动另一个ssh连接,则密钥认证有效。
mindless.panda

Answers:


39

在您的sshd_config文件中更改此行:

AuthorizedKeysFile /etc/ssh/%u/authorized_keys

然后将您的authorized_keys文件移动到/ etc / ssh /您的用户名/ authorized_keys

这篇文章记录了解决此问题的另一种方法。


1
我以为第一个解决方案听起来很完美,但对我却不起作用。不知道为什么。但是您链接到的帖子效果很好。谢谢!
乔什(Josh)

3
Josh-目标用户是这些文件和权限600(目录为700)的所有者吗?
NVRAM

1
有关完整说明,请参见此链接:Ubuntu上的SSH密钥。向下滚动到“疑难解答”部分。
jjeaton 2011年

8

此解决方案受此文章启发。恕我直言,这比修改/ etc / ssh / sshd_config更好,因为它根本不需要root用户访问权限。

# Make your public key accessible
mkdir -m 700 /home/.ecryptfs/$USER/.ssh
echo $YOUR_PUBLIC_KEY > /home/.ecryptfs/$USER/.ssh/authorized_keys
ln -s /home/.ecryptfs/$USER/.ssh/authorized_keys ~/.ssh/authorized_keys
ecryptfs-umount-private
chmod 700 $HOME
mkdir -m 700 ~/.ssh
ln -s /home/.ecryptfs/$USER/.ssh/authorized_keys ~/.ssh/authorized_keys

# Make it auto-mount with first login.
# Note: it can cause problems with automated login.
echo /usr/bin/ecryptfs-mount-private > ~/.profile
echo cd >> ~/.profile
echo source .profile >> ~/.profile
ecryptfs-mount-private

3
您能否提供这实际上是什么的摘要说明?
mindless.panda

我做了一个编辑来解释发生了什么:你保存你的公钥与您要访问的机器(S)authorized_keys/home/**.ecryptfs**/$USER不加密,并链接到它从你的加密的家,以及未加密的家。.profile未加密主目录中的新目录应将已加密的主目录挂载到它的“ cd”目录并提供真实目录.profile
LiveWireBT

在新的16.04安装上可以正常工作。很少有评论:未加密的主目录不可写(这很有意义,您不希望用户通过在其中意外存储数据来破坏所有内容),因此请临时更改权限。另外,还必须从终端执行所有这些操作,从GUI和lightdm注销,或者停止使用正在使用的DM。ecryptfs-mount-private除非您登录到GUI,否则每次通过公共密钥成功登录后都要求输入用户密码。我的编辑用here文档替换了一些回声,键入的重复性较小,不要为此感到困惑。
LiveWireBT

2

我只是花了一些时间来解决这个问题,答案是,从根本上讲这几乎是不可能的。这可能通过ssh设置无密码公钥验证的登录,这样你就不会在你的密码键入登录,但是,这并不让你随时随地,因为你的主目录仍然是加密。

一个简单的事实是,加密的主目录是使用密码*加密的,因此解密它的唯一方法是使用该密码。

而且,如果您认为从理论上讲应该可以使用ssh密钥在登录时解密安装密码,那么这将不起作用,因为您的私钥根本不会发送到服务器。

因此,基本上,如果要加密,则必须使用密码。出于相同的原因,加密的主目录与指纹登录不兼容。


*我知道它比单个密码要复杂,但是现在让我们保持简单。


好吧,djhowell的答案非常有效,因此大概是我的主目录已使用操作系统拥有的密钥进行了加密,并且可以用来对其进行解密。此外,在使用SSH进行登录时,sshd不知道如何解密我的家庭目录,因此无法解释为什么它可以使用密码身份验证。
乔什(Josh)

等待,所以当您通过ssh登录时没有输入任何密码时,您的加密主目录实际上已经挂载了吗?
瑞安·汤普森

是的,它确实。当我注销时,它会掉下来。
乔什(Josh)

好吧,这很奇怪。我得到了我在回答中描述的行为。仅当我的登录名涉及密码(特别是我的登录密码)时,才会挂载我的私有目录。我想知道您做了什么不同的工作才能使其与公钥一起使用。
瑞安·汤普森

@Ryan Thompson您正在使用Ubuntu 9.10吗?
乔什(Josh)

1

如果您不喜欢修改默认设置(我不喜欢,我喜欢我的文件位于期望的位置),那么您可能想看看我的文章中如何做到这一点:

http://www.enetworkservices.net/wordpress/ssh-public-keys-with-encrypted-home-directory.html

简而言之。您将密钥放在用户~/.ssh的加密版本中~/.ssh,并将加密版本符号链接到另一个用户。这样,它就永远存在。

对于像我这样的懒惰人,这里有一个脚本可以为您做。只需以普通用户身份运行即可。不需要root访问或权限,也不需要更改服务器配置。纯普通用户设置。

#!/bin/bash
#
# Encrypted Home DIR SSH Key fix.
# Requires modification to sshd_config
#  AuthorizedKeys /etc/ssh/authorized_keys/%u/authorized_keys
# sudo mkdir /etc/ssh/authorized_keys -m 777
# for existing users run from home directory when login.
# for new users modify /etc/skel to include .bashrc to call script.
#
# Author: Benjamin Davis <bdavis@enetworkservices.net>

# Check if directory exists.
if [ ! -d "/etc/ssh/authorized_keys/$LOGNAME" ]
then
    # Make directory with restricted permissions.
    echo "Creating user ssh directory."
    mkdir /etc/ssh/authorized_keys/$LOGNAME -m 700
fi

# Check real users home .ssh folder
if [ -d "/home/$LOGNAME/.ssh" ]
then
    # Check if dir is symlink
    if [ ! -h /home/$LOGNAME/.ssh ]
    then
        echo "Moving configs."
        mv /home/$LOGNAME/.ssh/. /etc/ssh/authorized_keys/$LOGNAME/.
        rm -rf /home/$LOGNAME/.ssh/
        ln -s -T /etc/ssh/authorized_keys/$LOGNAME /home/$LOGNAME/.ssh
        clear
    fi
else
    # Does not exist so link it.
    if [[ $EUID -ne 0 ]]
    then
        echo "User ssh config folder does not exist. Creating."
        mkdir /home/$LOGNAME/.ssh -m 700
        ln -s -T /etc/ssh/authorized_keys/$LOGNAME /home/$LOGNAME/.ssh
    fi
fi

0

您可以使用更安全的公共密钥登录,然后在输入密码后执行以下命令来挂载目录:

ecryptfs-mount-private

~/README.txt通过SSH登录后读取文件,您会发现您没有文件,因为未安装加密目录。

无论如何,您都不应该使用无密码的公共密钥登录。查看ssh-agent以获得更好的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.