我刚刚使用 openssh-server 设置了一个 vanilla ubuntu lucid (10.04) 系统。我正在尝试设置公钥身份验证,但只有当我首先使用密码身份验证进行连接并保持该会话打开时,它才有效。所有新的并发会话都将使用公钥。
我已采取所有步骤来确保我的服务器端主目录具有正确的权限。
chmod go-w ~/
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
我的客户端 RSA 2048 位公钥已附加(仅一行)到 authorized_keys 文件中。我的 RSA 密钥也有空白密码。
我不知道是什么原因造成的。我知道一定是我的服务器配置出了问题。我听说如果配置不够安全,就不会允许公钥身份验证,但我不知道那可能是什么。
# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
其余为默认。PublicKey 有效,但不适用于第一个会话。
提前致谢!
答案1
如果您有一个加密的主目录,就像 Ubuntu 使用 EcryptFS 加密一样,那么这就可以解释您所遇到的情况。在您首次使用密码登录后,您的 ~/.ssh/authorized_keys 首次可用。
允许通过 ssh 密钥直接登录的一种方法是指定授权密钥文件在主目录之外。这可以通过在路径中使用 %u(用户)而不是 %h(主目录)来实现。另一个选项是将 ~/.ssh/authorized_keys 的副本放在主目录的“未挂载”版本中。这就是 EcryptFS 挂载下的目录。
然而,不确定这些解决方案对您有多大帮助。您仍然需要使用密码登录才能访问常规主目录。您的用户密码用于解开挂载/解密 EcryptFS 主目录所需的密码。是的,您仍然可以手动挂载/解密,但这几乎看起来像是一个不同的问题。
答案2
我的猜测是,一旦您使用密码验证登录它就会起作用,因为在客户端您已经设置了 ControlMaster/ControlPath,允许在后续连接中重用连接。
尝试通过将 LogLevel 设置为 DEBUG3 来增加服务器端的日志级别,并挖掘日志(/var/log/auth.log)以查看发生了什么。
在客户端,将 -vvv 添加到 ssh 命令行以查看您的客户端正在使用哪些密钥。
通过这两条信息你应该能够弄清楚发生了什么。
答案3
您的authorized_keys文件需要位于.ssh文件夹中,并且它应该具有644权限。
答案4
cp ~/.ssh/authorized_keys /etc/authorized_keys
并更改 /etc/ssh/sshd_config
授权密钥文件 /etc/authorized_keys
并重新加载 sshd /etc/init.d/ssh restart