在我的家庭网络中,我有一台运行 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
复制到远程帐户文件的许多麻烦。.pub
authorized_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 目录及其内容。