SDB:OpenSSH 公钥认证

跳转到:导航搜索
Icon-merge.png
更新至版本 13.2
本文需要针对较新版本进行测试。如果您正在使用此指南的较新版本,并且发现指南已更新至此版本,请将版本号添加到知识栏。请参阅版本相关任务:SDB 页面以获取更多信息。
本文档描述了设置公钥认证的各种方法,以提高易用性或获得更高的安全性。需要具备关于 ssh 语法和设置的基本知识。对于自定义设置,您可能需要能够以 root 用户身份登录。

在 openSUSE 上测试


通用

公钥认证允许您在服务器上登录,而无需服务器端的密码。密钥对在客户端生成,私钥必须存储在安全的地方。公钥被发送到服务器并存储在“authorized key 文件”中。这意味着持有私钥的计算机(和用户)可以登录到持有公钥的计算机。甚至可以选择完全禁用键盘交互式登录,如上所述。请务必小心,不要在设置、创建、上传和测试您的公钥认证之前执行此操作!否则您可能会把自己锁定在外。

禁用 SSH 服务器上的密码认证,将大大提高安全性。密码很容易受到系统性攻击的破坏。与公钥相比,密码很短。


工作原理

在执行任何认证之前,都会建立加密连接。之后,客户端将收到可能的认证方法列表。如果其中包含“publickey”并且找到密钥对,则.ssh/config目录中,将发送加密签名。

此签名包含只有双方都知的的数据,并且将由您的私钥加密。服务器将尝试使用服务器上存储的相应公钥解密签名。如果成功且数据有效,则认证成功,您将被授予访问权限。如果尝试失败(例如,未设置密钥对,或尚未上传到服务器),将尝试其他认证方法。(密码或基于主机的认证)

密钥类型选择

您可以选择两种密钥类型:DSARSA。在安全性方面,如果两个密钥大小相同,则这两种方法之间没有太大差异。DSA 的大小固定为 1024 位,而 RSA 可以是大于 768 位的任何大小。

直到 2000 年 9 月 21 日,RSA 的使用受到专利的限制,但在那之前的两周,它已发布到公共领域,这意味着 RSA 的使用不受任何限制。

密钥的长度决定了强度。RSA 的默认密钥长度为 2048。也可以更大,这使得 RSA 成为最适合认证的密钥。


安全

如前所述:密钥越长,安全性越高。但这并不是我们面临安全性的唯一问题。如果有人可以访问您的客户端文件系统并读取您的私钥,他可以窃取您的身份以登录到您已设置公钥认证的任何主机。原理很简单:任何人都可以知道您的公钥,但只有您才能知道您的私钥。

因此,您的 ~/.ssh 目录应始终是

$ ls -al ~
drwx------ 2 timus users 95 Jan 11 07:42 .ssh

这意味着“timus”是该目录的所有者,只有他可以读取/写入它。没有人可以读取或写入此目录。在生成密钥时,目录会自动为您创建,并具有适当的权限。如果权限不正确,ssh 将在您调用它时退出。

密钥密码

您可以选择使用公钥认证来提高安全性,或者为了避免每次登录时都必须输入密码而使用公钥认证。安全的方法是:使用密码保护的密钥进行公钥认证,并在服务器上禁用密码认证。这将使您的服务器不易受到系统性攻击。如果您与他人共享工作站或家庭文件系统,这将是最佳方法。例如,让您的系统管理员远离您的私事。

但是,如果您在专用网络中使用 ssh,或者您不与他人共享工作站,您可以选择不为您的密钥对设置密码,并一直使用它进行轻松连接。

SSH Agent

您也可以选择使用 SSH Agent。这将使使用密码保护的密钥变得容易。您需要在会话中第一次使用它时输入密码,sshagent 会为您保持打开状态,直到您注销。这使您可以随时连接和断开与远程主机,而无需再次输入密码。


密钥生成

如果 ssh-keygen 在没有任何参数的情况下使用,将生成一个 2048 位 RSA 密钥。私钥将存储在~/.ssh/id_rsa和公钥在~/.ssh/id_rsa.pub。根据您的需要,您可以选择设置密码。将这些行留空将不会设置密码。

$ ssh-keygen
Enter file in which to save the key (/home/your_user/.ssh/id_rsa): <Enter>
Enter passphrase (empty for no passphrase): <Enter>
Enter same passphrase again: <Enter>
Your identification has been saved...

自定义密钥对

您可能希望使用不同大小的密钥(更大或更小)、DSA 或将密钥保存到不同的名称下。

要创建一个大小为 1152RSA 密钥对,名称为 /home/your_user/.ssh/my_id

$ ssh-keygen -t rsa -b 1152 -f ~/.ssh/my_id
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <Enter>
Enter same passphrase again: <Enter>
Your identification has been saved in /home/your_user/.ssh/my_id.
Your public key has been saved in /home/your_user/.ssh/my_id.pub.
...\

如果您想使用 DSA,则限制为 1024 位密钥大小。

要创建一个大小为 1024DSA 密钥对,名称为 /home/your_user/.ssh/id_dsa

$ ssh-keygen -t dsa -f ~/.ssh/id_dsa
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): <Enter>
Enter same passphrase again: <Enter>
Your identification has been saved in /home/your_user/.ssh/id_dsa.
Your public key has been saved in /home/your_user/.ssh/id_dsa.pub.
...\


上传您的密钥

为了使用您生成的密钥进行认证,必须上传您的公钥。如果您没有创建自定义密钥对,如上所述,请发出

$ ssh-copy-id user@ssh.yourserver.org
密码
现在尝试登录机器,使用“ssh 'user@ssh.yourserver.org'”,并在
~/.ssh/authorized_keys
中检查以确保我们没有添加您不期望的额外密钥。

如果希望使用与当前登录用户名相同的用户名,可以省略“user@”部分。

自定义密钥对

如果您使用了上述示例之一来创建自定义密钥,则应使用 -i ~/.ssh/my_id.pub 选项,其中 my_id.pub 应该替换为您的自定义密钥名称(例如,id_dsa.pub)。

$ ssh-copy-id -i ~/.ssh/my_id.pub user@ssh.yourserver.org


自定义设置

OpenSSH 默认接受公钥认证。您只需要更改以下设置,如果您正在使用自定义密钥对或希望完全禁用密码认证。

SSHD 设置(服务器)

Icon-warning.png
警告:从 openSSH 5.4 开始(随 openSUSE 11.3 一起提供),配置中的相对路径不再允许。在指向authorized_keys文件时,请确保在路径前面使用 %h/。旧版本仍然可以不使用。

编辑/etc/ssh/sshd_config(在服务器上以 root 身份)并取消注释您想要更改的选项。如果您想确保使用公钥认证,或者在此处将其更改为 no 以禁用它

PubkeyAuthentication yes

要更改查找授权密钥的路径和文件名。请注意,ssh-copy-id命令仍然导入到%h/.ssh/authorized_keys文件,即使更改了此设置。(客户端软件无法读取sshd_config) :

AuthorizedKeysFile %h/.ssh/authorized_keys

禁用密码认证

如果您追求额外的安全性,可以选择完全禁用密码认证。

Icon-warning.png
警告:在应用以下设置之前,请确保已将公钥上传到您的服务器并进行了测试,否则您可能会把自己锁定在外!

以下设置应该已经就位。由于 openSUSE 使用 PAM,因此 PasswordAuthentication 应该始终被禁用。

PasswordAuthentication no
UsePAM yes

ChallangeResponseAuthentication 选项用于代替。(您正在被要求提供 PAM 值得的密码。)将此选项设置为 no 以禁用密码认证。

ChallengeResponseAuthentication no

保存文件并重新启动 SSHD。

$ /etc/init.d/sshd restart

阅读 更新密钥 部分,如果您想在禁用密码认证时上传新密钥。

设置 SSH

如果您想使用 DSA 或任何其他自定义密钥名称(或路径),请编辑系统范围内的配置文件/etc/ssh/ssh_config在客户端以 root 身份。取消注释并根据需要更改以下选项

IdentityFile ~/.ssh/my_id

更新密钥

如果您认为您的密钥已被泄露或只是纯粹的偏执,您可能希望更新您的密钥对。如果您仍然使用密码认证,可以像上面的工作流程一样进行操作。这将覆盖您当前的密钥对并将您的新密钥上传到服务器(您需要输入密码才能执行此操作)。之后,您可以登录并编辑~/.ssh/authorized_keys以删除旧密钥。

如果您无法再使用密码认证,则需要更加小心。您需要使用临时名称创建新密钥,将其上传到服务器,然后使用新的密钥对覆盖旧密钥

$ ssh-keygen -t rsa -f ~/.ssh/new_id_rsa
$ ssh-copy-id -i ~/.ssh/new_id_rsa.pub user@ssh.yourserver.org
$ cd ~/.ssh
$ mv new_id_rsa.pub id_rsa.pub
$ mv new_id_rsa id_rsa

现在登录服务器以从~/.ssh/authorized_keys.


故障排除

公钥认证不再工作

版本:11.3+ 以下适用于从 openSUSE 11.3 开始的情况。

从 openSSH 5.4 开始,配置中的相对路径不再允许。在指向 authorized _keys 文件时,请确保在路径前面使用 %h/。旧版本仍然可以不使用。在/etc/ssh/sshd_config更改

AuthorizedKeysFile .ssh/authorized_keys
-to-
AuthorizedKeysFile %h/.ssh/authorized_keys

参见

相关文章

外部链接