使用带有 --noask 选项的钥匙串保存 SSH 密钥密码

anl*_*lar 12 ssh ssh-agent

我想使用钥匙串来管理 SSH 密钥的密码提示,但它应该 1) 仅在我实际使用密钥时询问它,并且 2) 之后将其保存一段时间。目前我有2个选择:

  1. $ eval `keychain --eval --agents ssh id_rsa` -- 这将始终在启动时要求密码短语,但随后会保存它。
  2. $ eval `keychain --eval --noask --agents ssh id_rsa` - 启动时不会要求任何东西,但每次我使用该密钥时都会要求输入密码。

有什么方法可以结合这些方法的优点吗?

Jak*_*uje 11

ssh-agentOpenSSH的和最新版本使简单:

  1. ssh-agent使用添加的键的默认超时启动正常(例如 60 分钟):

    eval `ssh-agent -t 60m`
    
    Run Code Online (Sandbox Code Playgroud)
  2. 配置您ssh将实际使用的密钥添加到代理。向 ~/.ssh/config` 添加新行:

    AddKeysToAgent yes
    
    Run Code Online (Sandbox Code Playgroud)

    此功能在最新的 OpenSSH 7.2 中。在以前的版本中,如果超时,您需要手动将密钥添加到代理中,但可以使用 bash 功能非常简单地自动化,如下所示:

    ssh() {
      /bin/ssh -o BatchMode=yes $* || \
        ssh-add path/to/the-key && /bin/ssh $*
    }
    
    Run Code Online (Sandbox Code Playgroud)

    想法:尝试在批处理模式下使用密钥进行连接(如果密钥不存在,则不会提示输入密码并失败),失败时,将密钥添加到代理并重新运行 ssh 命令。