为什么我的公钥不允许我无需密码登录?

为什么我的公钥不允许我无需密码登录?

在我的家庭网络中,我有一台运行 Ubuntu 的服务器和另一台运行 Windows 7 的台式机。我在 Windows 机器上使用 cygwin 来 ssh 进入服务器。我尝试在这两台机器之间设置密钥。在 Windows 机器上,我使用 创建了密钥。ssh-keygen -t rsa然后我将生成的 id_rsa.pub 'scp' 到服务器并将其放在文件中~/.ssh/authorized_keys。据我所知,这应该是我所需要的全部内容。但是,正如您可能已经猜到的那样,事实并非如此。

我正在尝试使用 ssh [email protected]。我的猜测(我还没有得到很好的信息)是,我可能需要设置一些不同的东西来使用 cygwin,或者它可能与使用 ip 地址而不是主机名有关...有什么指示或想法吗?

答案1

这可能是您的 ~/.ssh 目录或 ~/.ssh/authorized_keys 文件的权限问题。

您的 ~/.ssh 目录应至少被 chmod 为 700,您的 authorized_keys 文件应至少被 chmod 为 644。如果您检查 /var/log/secure 日志文件,它应该会提示您失败的原因。

答案2

如果您在使用 ssh 时遇到身份验证问题,首先要调查的是客户端通过一些调试所显示的内容:

% ssh -v host
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/david/.ssh/id_dsa
debug1: Server accepts key: pkalg ssh-dss blen 433
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
...

表示公钥连接成功。

% ssh -v host
...
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/david/.ssh/id_dsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/david/.ssh/identity
debug1: Trying private key: /home/david/.ssh/id_rsa
debug1: Next authentication method: password
david@ace's password: 
...

这实际上并没有提供太多关于为什么拒绝公钥身份验证的信息。最好的信息可以在服务器上找到。 sshd 将记录到 AUTH 系统日志工具中,因此您可以在记录到的任何位置找到信息(就 Debian 而言/var/log/auth/)。

Aug 19 08:18:36 ace sshd[10100]: Authentication refused: bad ownership or modes 
       for directory /home/david/.ssh

这告诉我们.ssh 的权限错误,我们可以轻松修复它。

Aug 19 08:26:41 ace sshd[12156]: error: key_read: uudecode
       ZAAAAB3NzaC1kc3MAAACBAIUuAmpj9FuE71EfqJDVAfI+pUZ++xSWbUvEh7U36WW/...

这告诉我们它无法读取该特定的键,所以我们知道如何修复它。

如果你没有从日志中获得任何有用的信息,你可以打开日志记录。编辑/etc/ssh/sshd_config并将LogLevel行更改为:

 LogLevel DEBUG

然后运行

 /etc/init.d/ssh reload

现在,当您尝试连接时,您应该会看到一些类似以下的日志:

Aug 19 08:32:12 ace sshd[13537]: debug1: Checking blacklist file 
      /usr/share/ssh/blacklist.DSA-1024
Aug 19 08:32:12 ace sshd[13537]: debug1: Checking blacklist file 
      /etc/ssh/blacklist.DSA-1024
Aug 19 08:32:12 ace sshd[13537]: debug1: temporarily_use_uid: 1002/513 (e=0/0)
Aug 19 08:32:12 ace sshd[13537]: debug1: trying public key file 
      /home/david/.ssh/authorized_keys
Aug 19 08:32:12 ace sshd[13537]: debug1: fd 4 clearing O_NONBLOCK
Aug 19 08:32:12 ace sshd[13537]: debug1: matching key found: file 
      /home/david/.ssh/authorized_keys, line 1
Aug 19 08:32:12 ace sshd[13537]: Found matching DSA key: 
      1c:46:89:52:c1:79:c8:8f:43:3c:4e:77:ad:a1:5d:1b

这是一次成功的登录。

如果您需要更多信息,可以使用 DEBUG2 和 DEBUG3 获取更多信息。修复问题后,不要忘记将日志级别改回(可能为 INFO)。

答案3

一些发行版提供了一个名为的工具(它实际上是一个 shell 脚本) 。我发现使用它可以解决将用户密钥的一部分ssh-copy-id复制到远程帐户文件的许多麻烦。.pubauthorized_keys

用法

$ ssh-copy-id user@remotehost

您甚至可以告诉它要复制的不同键(它默认为id_rsa*键。

$ ssh-copy-id -i ~/.ssh/somekey.pub user@remotehost

该脚本还负责在远程主机上创建用户$HOME/.ssh目录正确设置权限。

$ ssh-copy-id --help
Usage: /usr/bin/ssh-copy-id [-i [identity_file]] [user@]machine

它有一个基本的手册页。在我的 Red Hat 发行版(Fedora、CentOS、RHEL)上,它是普通 openssh-client 包的一部分!

答案4

权限对于 ~/.ssh/authorized_keys 文件非常重要。该文件本身不得具有允许任何其他人写入的权限。chmod go-rwx ~/.ssh/authorized_keys 此外,.ssh 目录也不得允许写入。chmod go-rwx ~/.ssh 您的主目录也不得允许写入。chmod go-w ~/

原因是如果其他人能够写入您的目录(通过组权限或其他权限),那么其他人很容易在您不知情的情况下将授权密钥塞入其中。如果您的主目录允许写入,那么其他人就可以重新创建 .ssh 目录及其内容。

相关内容