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

我正在使用Awesome Window Manager

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

受到答案的启发,我在〜/ .ssh / config中添加了私钥

〜/ .ssh / config的内容:

IdentityFile 'private key full path' 

〜/ .ssh / config: 0700的 权限

但它对我不起作用。

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

编辑

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

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

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

SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh

我按照完全相同的步骤,同样我没有任何GUI ssh-add对话框。

编辑2

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

编辑3 :似乎这在Awesome窗口管理器中不起作用:(可能还有其他..

如果您使用Unity或启动gnome-keyring-daemon的会话管理器,您只需使用Seahorse(密码和密钥)来建立密钥,定义密钥,设置密码,并将其公钥分发给你打算用ssh的电脑。 不需要终端命令。

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

  1. 选择File-> New并选择Secure Shell Key。 按继续。

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

  3. 系统将提示您输入两次关键短语(第二次检查您是否第一次输错了密码短语。

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

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

假设gnome-keyring-daemon在您登录Lightdm时正确启动,并且再次由您的会话管理器启动,当您第一次使用带有ssh的密钥时,系统将提示您输入密钥短语。 在此对话框中,您可以提供关键短语,选择“ Details控件,并在登录时要求解锁密钥环 – 自动提供此密钥。 按确定

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

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

使密码保护的SSH密钥在会话和重新启动之间保持不变

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

  • 在将公钥添加到远程服务器后进行连接时,您将获得GUI ssh-add对话框:

    在此处输入图像描述

  • 通过单击三角形展开“详细信息”,您将得到以下内容。 默认为“我退出时锁定密钥环”,这要求您在每个会话中输入一次密码:

    在此处输入图像描述

  • 将其更改为自动解锁…每当我登录时 ,这意味着无论何时登录到您的会话都会有效 – 它由您的用户密码“控制”。 它会在重新启动后持续存在。

    在此处输入图像描述

  • 输入一次密钥密码即可 – 密钥通过初始成功登录桌面环境进行身份validation。


如果您使用的是AwesomeWM

在全新的用户标识中使用全新安装的AwesomeWM进行测试

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

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

  • 将以下内容添加到~/.xprofile

       #!/斌/庆典
       eval $(gnome-keyring-daemon --start)
      导出SSH_AUTH_SOCK
       export GNOME_KEYRING_PID
       export GNOME_KEYRING_CONTROL
    

~/.xprofile文件中的命令将在启动awesome窗口管理器之前由~/.xprofile执行,并将它绑定到PAM通过上述环境变量启动的gnome-keyring-daemon --login进程。

  • 注销回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环境变量的值决定调用哪个身份validation代理,可以通过键入export | grep SOCK来检查 export | grep SOCK

  • 对于ssh-agent,这是SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130的forms(不是你希望能够保存你的密钥)

  • 但对于gnome-keyring-daemon (你想要的)formsSSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"

  • 所以检查值,并用ps aux | grep keyring检查 gnome-keyring-daemon正在运行的ps aux | grep keyring ,如果是的话,用gnome-keyring-daemon --start的结果初始化它gnome-keyring-daemon --start

  • 然后,您可以通过键入ssh-add -l来检查控制台中相关的已保存标识 – 如果它显示“无代理”,则您在配置gnome-keyring-daemon时出错。

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

  • 使用ssh-keygen -t dsa生成私钥/公钥对
  • 将公钥复制到远程计算机,通常是〜/ .ssh / authorized_keys(使用ssh-copy-id
  • 登录到远程系统之前运行ssh-add ,这将要求您输入密码并存储它
  • 登录远程系统,无需密码

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

ssh-agent的另一个优点是,如果您使用ssh -A user@domain.name登录到远程系统,则可以从domain.name计算机进一步ssh到包含公钥的第三台计算机,而不必将私钥复制到domain.name计算机(它永远不会看到你的私钥,只有一次性挑战/响应)。

您可以使用

ssh-add 'filename or fullpath'

如果您的密钥有密码,将要求您提供密码

然后你可以用密码连接

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

 ssh-keygen -t rsa -N '' 

然后:

通过scp将.ssh/id_rsa.pub.ssh/id_rsa.pub中的机器目标

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

全部完成。

无密码连接到远程机器:

 ssh user@remote_machine 

我们没有密码提示。