SDB:OpenSSH agent
请参阅本文的 页面以获取更多信息。
工作原理
当 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 将继续运行,直到关闭子 shell bash。
这将终止 bash 会话和 ssh-agent。
添加您的密钥
您可以使用 ssh-add 将您的密钥发送到 agent。Ssh-add 仅在它可以找到打开的 socket 时才有效。因此,它必须在 ssh-agent 的子 shell 中执行,如上面的示例所示。
此命令将查找以下文件~/.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 相关软件包,请键入以下命令
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 身份安装其他软件包
创建 .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可执行。
运行您的自定义 xsession
如果您现在注销或重新启动系统,您将看到您的登录屏幕。这可以是 KDM、GDM、LXDM 或任何其他类型的 DM。在此 DM 中,您可以选择应为此会话加载哪个 桌面环境。您应该在此处选择 自定义。自定义 在登录时运行之前创建的~/.xsession脚本。
加载您的 桌面环境 后,系统应提示您使用 ssh-askpass 对话框,您可以在其中输入密钥的密码。成功后,您的密钥将被解锁,现在您可以登录到您的远程主机,而无需使用任何密码
如果您未能提供有效的密码,ssh-askpass 将在不将密钥添加到您的 agent 的情况下关闭。如果您想再次尝试,可以从命令行运行 ssh-add,并在那里提供您的密码。
设置 PAM
以 root 身份编辑 /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