SDB:OpenSSH agent

跳转到:导航搜索
Icon-obsolete.png
本文或章节指的是版本 '11.0',现在已经过时!
请参阅本文的 讨论 页面以获取更多信息。
SSH agent 可以为您提供一种简单且安全的方式来使用 公钥认证 进行 SSH 连接。它允许您仍然使用无密码远程 SSH 登录,同时将您的公钥锁定在密码之后。本文解释了 ssh-agent 程序的工作原理和用法。

在 openSUSE 上测试

Icon-checked.png

推荐文章

工作原理

ssh-agent 启动时,它将接受新密钥的输入,并通过 socket 提供这些密钥。此 socket 仅供 ssh-agent 的子进程使用。这意味着 ssh-agent 必须使用另一个命令作为参数进行调用。这可以是一个 shell 或您的完整 X 桌面。在 ssh-agent 启动后,可以使用程序 ssh-add 将您的私钥添加到 ssh-agent。

基本调用

在以下示例中,ssh-agent 从命令行启动,并使用 bash 作为参数。这将在您的当前 shell 中启动一个 bash 会话,并在后台运行 ssh-agent。

$ ssh-agent bash

Ssh-agent 将继续运行,直到关闭子 shell bash。

$ exit

这将终止 bash 会话和 ssh-agent。

添加您的密钥

您可以使用 ssh-add 将您的密钥发送到 agent。Ssh-add 仅在它可以找到打开的 socket 时才有效。因此,它必须在 ssh-agent 的子 shell 中执行,如上面的示例所示。

$ ssh-add

此命令将查找以下文件~/.ssh/id_rsa ~/.ssh/id_dsa ~/.ssh/identity并自动添加它们。如果设置了密钥密码,系统将提示您输入密钥密码。(这通常是选择使用 ssh-agent 的原因。)ssh-add 命令必须在每次启动 ssh-agent 时执行。


自动启动

有两种自动启动方式:通过 自定义 xsession 或通过 PAM

如果使用 自定义 xsession
您可以让您的密钥在一段时间后过期。到期后,您需要使用 ssh-add 重新打开它们。
您可以设置用于加载 ssh-agent 和您的桌面环境的用户特定脚本。
您可以通过更改脚本中的 ssh-add 语法来自动加载自定义命名的密钥。
自动启动 ssh-agent 仅适用于此自定义会话。如果您登录到任何其他桌面环境或 shell,您需要手动加载 agent,或让它通过特定的 rc 脚本加载,例如。~/.bashrc
如果您想切换到另一个 桌面环境 并仍然自动加载 ssh-agent,您需要修改您的 .xsession 脚本,而不是简单地在登录显示中选择另一个会话。
您需要为需要使用 ssh-agent 的每个用户创建一个单独的 .xsession 文件
当用户登录时,他们需要为密钥输入额外的密码,系统将提示他们输入。

如果使用 PAM
Ssh-agent 将为任何登录方式启动。(桌面环境和 shell)
Ssh-agent 将在每个用户登录时启动。
您可以使用为您的私钥设置的密码登录,这意味着您只需要输入一个密码。
您可以选择不启动 agent,而是输入您的系统密码而不是密钥密码。
密钥无法设置为过期,因此如果您想防止其他人使用您的密钥,则需要锁定屏幕。(但他们无法将其盗走并放到自己的系统上)
只能自动加载默认命名的密钥,并且这将是您输入密码的密钥。


自定义 xsession

如果您选择设置自定义 xsession,则需要安装以下软件包

  • openssh(默认情况下已安装在 openSUSE 中)
  • openssh-askpass(必需)
  • ksshaskpass(KDE 用户可选)
  • openssh-askpass-gnome(GNOME 用户可选)

要检查已安装哪些 ssh 相关软件包,请键入以下命令

$ zypper se ssh
S | Name                           | Summary                                                 | Type      
--+--------------------------------+---------------------------------------------------------+-----------
  | ksshaskpass                    | A KDE 4 version of ssh-askpass with KWallet support     | package   
i | openssh                        | Secure Shell Client and Server (Remote Login Program)   | package   
  | openssh-askpass                | A passphrase dialog for OpenSSH and the X Window System | package   
  | openssh-askpass-gnome          | A GNOME-Based Passphrase Dialog for OpenSSH             | package   

如果需要,以 root 身份安装其他软件包

$ zypper in openssh-askpass ksshaskpass

创建 .xsession

现在您需要创建 xsession 脚本文件。应将其保存为~/.xsession并且应该是可执行的。以普通用户身份打开编辑器。

.xsession 示例脚本自动加载您的默认密钥(id_rsa、id_dsa、identity),并且它们不会过期。之后启动 KDE。

#!/bin/bash

ssh-agent {
  ssh-add &
  startkde
}

以下示例脚本加载自定义密钥,这些密钥将在 1 小时后过期,并启动 GNOME 桌面

#!/bin/bash

ssh-agent {
  ssh-add -t 1h ~/.ssh/custom_key ~/.ssh/extra_key &
  gnome-session
}

输入脚本后,保存并退出编辑器,然后使其~/.xsession可执行。

$ chmod +x ~/.xsession

运行您的自定义 xsession

如果您现在注销或重新启动系统,您将看到您的登录屏幕。这可以是 KDM、GDM、LXDM 或任何其他类型的 DM。在此 DM 中,您可以选择应为此会话加载哪个 桌面环境。您应该在此处选择 自定义自定义 在登录时运行之前创建的~/.xsession脚本。

加载您的 桌面环境 后,系统应提示您使用 ssh-askpass 对话框,您可以在其中输入密钥的密码。成功后,您的密钥将被解锁,现在您可以登录到您的远程主机,而无需使用任何密码

如果您未能提供有效的密码,ssh-askpass 将在不将密钥添加到您的 agent 的情况下关闭。如果您想再次尝试,可以从命令行运行 ssh-add,并在那里提供您的密码。

设置 PAM

Icon-warning.png
警告:以下部分未经测试,可能不适用于当前的 OpenSUSE 版本。本文目前正在重写。请查看 讨论页面 以获取更多信息。

以 root 身份编辑 /etc/pam.d/xdm

$> su $> vi /etc/pam.d/xdm


并添加以下行

 #%PAM-1.0
 auth     sufficient     pam_ssh.so
 auth     include        common-auth
 account  include        common-account
 password include        common-password
 session  include        common-session
 session  required       pam_ssh.so
 session  required       pam_devperm.so
 session  required       pam_resmgr.so

这将允许您使用 SSH 密码短语在 KDM 和 GDM 中进行身份验证,并将其用于启动 ssh-agent。无需进行其他更改。

如果系统中的用户无法使用 SSH 身份验证(例如,因为他们没有 SSH 密码短语),则 X 服务器将不会启动。因此,您可能需要更改该行

session  required       pam_ssh.so

session  sufficient     pam_ssh.so