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

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

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

  1. $ eval `keychain --eval --agents ssh id_rsa`——启动时总会要求输入密码,但随后它会保存它。
  2. $ eval `keychain --eval --noask --agents ssh id_rsa`-- 启动时不会要求任何内容,但每次我使用该密钥时都会继续要求输入密码。

有没有办法结合这些方法的优点呢?

答案1

ssh-agentOpenSSH 的最新版本让这一切变得简单:

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

    eval `ssh-agent -t 60m`
    
  2. 配置您ssh以将实际使用的密钥添加到代理中。添加新行到 ~/.ssh/config`:

    AddKeysToAgent yes
    

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

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

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

相关内容