如何永久保存受密码保护的 SSH 密钥?

如何永久保存受密码保护的 SSH 密钥?

我正在使用 Awesome Window Manager

如何永久添加带有密码的私钥?

受到答案的启发这里我已在 ~/.ssh/config 中添加了私钥

~/.ssh/config 的内容:

IdentityFile 'private key full path'

~/.ssh/config 的权限: 0700

但它对我不起作用。

如果我在每个会话中手动添加密钥,它可以起作用,但我正在寻找一种更优雅的方式(不在 .bashrc 中)

编辑

  • 使用侏儒经典(无效果)版本。

将 SSH 密钥添加ssh-copy-if到远程主机后,我收到以下提示终端(GNOME Terminal 3.0.1)当我登录时:

ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
  • 使用惊人的窗口管理器 v3.4.10。我已经gnome-keyring-dameon这样做了,所以我杀死了另一个 pid 并运行gnome-keyring-daemon --start | grep SOCK(我也在 .profile 中添加了它)(grep)输出:

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

我遵循了完全相同的步骤,但同样没有得到任何 GUI ssh-add 对话框。

编辑2

我从 Unity 上的 Ubuntu 11.10 虚拟机创建了一个新的受密码保护的密钥,但仍然无法收到任何密码提示。

编辑3:这似乎无法在 Awesome 窗口管理器中工作 :( 也可能在其他窗口中工作..

答案1

使受密码保护的 SSH 密钥在会话和重启期间保持不变

这可能就是您想要的:输入一次密钥密码后,无论何时登录,它都可以永远使用。它适用于大多数使用 Unity 或 Gnome 桌面的用户。

  • 当您将公钥添加到远程服务器并连接时,您将看到 GUI ssh-add 对话框:

    在此处输入图片描述

  • 点击三角形展开“详细信息”,您将看到以下内容。默认为“注销时锁定密钥环”,这要求您每次会话都输入一次密码:

    在此处输入图片描述

  • 将其更改为每当我登录时自动解锁,这意味着只要您登录到会话,它就会起作用 —— 它由您的用户密码“控制”。它将在重新启动后继续存在。

    在此处输入图片描述

  • 输入一次密钥密码即可 - 该密钥通过首次成功登录您的桌面环境进行验证。


如果您使用 AwesomeWM

使用新用户 ID 全新安装的 AwesomeWM 进行测试

  • 默认情况下,AwesomeWM用途ssh-agent

    $ 导出 | grep SSH
    声明-x SSH_AGENT_PID =“5479”
    声明-x SSH_AUTH_SOCK =“/tmp/ssh-fWCKNnPq5440/agent.5440”
    
  • 要使上述步骤生效,您必须使用gnome-keyring-daemonSSH 身份验证守护程序,而不是 ssh-agent。当您使用 lightdm 登录时,PAM 会启动,gnome-keyring-daemon并尝试使用您的解锁密码解锁登录密钥,但您必须将其添加到您的配置中才能使其保持运行并使用它。

  • 将以下内容添加到您的末尾~/.xprofile

      /bin/bash #!/bin/bash
      eval $(gnome-keyring-daemon --start)
      导出 SSH_AUTH_SOCK
      导出 GNOME_KEYRING_PID
      导出 GNOME_KEYRING_CONTROL
    

中的命令~/.xprofile将在启动之前由 xsession 执行惊人的gnome-keyring-daemon --login窗口管理器,并通过上述环境变量将其与 PAM 启动的进程绑定在一起。

  • 退出并重新登录 lightdm,现在当您这样做时ssh user@host,您应该会看到上述弹出窗口 - 使用这些弹出窗口解码 ~/.ssh/ 中的私钥,并将您的私钥保存到 gnome-keyring 登录密钥环。

适用于任何窗口管理器/桌面环境的通用解决方案

  • 是使用gnome-keyring-daemon而不是ssh-agent。为此,您需要运行gnome-keyring-daemon 初始化它ssh-agent要么在启动后执行此操作,要么ssh-agent根本不启动。

  • ssh(实际上是 ssh-add)根据环境变量的值决定调用哪个身份验证代理SSH_AUTH_SOCK,可以通过输入以下命令进行检查export | grep SOCK

  • 这是形式SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130这是ssh 代理 (这不是您想要保存密钥的功能)

  • 但形式SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"gnome-keyring-守护进程 (你要哪个)

  • 因此请检查值,并检查ps aux | grep keyring它检查一下gnome-keyring-守护进程正在运行,如果是,则使用以下结果对其进行初始化gnome-keyring-daemon --start

  • 然后,您可以通过键入以下内容在控制台中检查相关的已保存身份ssh-add -l- 如果显示“无代理”,则您在配置 gnome-keyring-daemon 时犯了错误。

答案2

如果您使用的是 Unity,或者启动 gnome-keyring-daemon 的会话管理器,则只需使用 Seahorse(密码和密钥)即可建立密钥、定义其用途、设置密码并将其公钥分发到您要使用 ssh 的计算机。无需终端命令。

您可以通过以下方式创建密码:

  1. 选择文件->新建,然后选择安全外壳密钥。按继续。

  2. 输入描述性名称,然后选择Create and set up

  3. 系统将提示您输入两次关键词(第二次是为了检查您第一次没有输入错误)。

  4. 输入要使用公钥的计算机以及您将在该计算机上使用该密钥的用户名。公钥将被复制到另一台计算机,并在必要时提示您在该计算机上输入密码。

现在My Personal Keys选项卡将显示密钥。

假设您登录 Lightdm 时 gnome-keyring-daemon 已正确启动,并且会话管理器再次启动了该进程,当您首次将密钥与 ssh 结合使用时,系统将提示您输入密钥短语。在此对话框中,您可以提供密钥短语,选择控件Details并要求每次登录时解锁密钥环——自动提供此密钥。按OK

如果有其他密钥可用于登录远程计算机,则可能不会以这种方式提示您。

完成此操作后,第一个 Seahorse 选项卡Passwords将列出密钥名称的“解锁密码条目”。单击“密码:登录”即可查看。

答案3

解决您的问题的方法是使用 ssh 代理。您只需解锁密钥的密码一次,之后该密码将保留在代理的内存中并自动使用

  • 使用以下方式生成私钥/公钥对ssh-keygen -t dsa
  • 将公钥复制到远程机器,通常是 ~/.ssh/authorized_keys (用于ssh-copy-id此)
  • ssh-add在登录远程系统之前运行,这将要求您输入密码并将其存储
  • 登录远程系统,无需密码

ssh-agent 在 .net 上有很好的描述,例如这里:

ssh-agent 的另一个优点是如果您使用 登录到远程系统,您可以进一步从 domain.name 计算机 ssh 到包含您的公钥的第三台计算机,而无需将您的私钥复制到 domain.name 计算机(并且它永远不会看到您的私钥,只有一次性的质询/响应)。ssh -A [email protected]

答案4

如果您想使用私钥,请执行以下操作:

ssh-keygen -t rsa -N ''

然后:

通过 scp复制.ssh/id_rsa.pub到目标机器.ssh/authorized_keys

scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys

全做完了。

无需密码即可连接远程机器:

ssh user@remote_machine

而且我们没有密码提示。

相关内容