当我在远程主机上执行 ssh 操作时,如何避免被询问“输入密钥密码”?

当我在远程主机上执行 ssh 操作时,如何避免被询问“输入密钥密码”?

我使用 ssh 连接到远程主机(linux、fedora),我想在那里执行 ssh 操作(使用 bitbucket 的 git)。该机器上运行着 ssh-agent,

$ ps -e|grep sh-agent
 2203 ?        00:00:00 ssh-agent

但是当我想要 git 时,它要求我输入密码

$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa': 

注意:如果我在本地操作该机器,它不会要求我输入密码

答案1

我认为使用 ssh 的最佳方式

在使用 Git 之前,请将您的密钥添加到ssh 代理

开始ssh 代理如果尚未启动:

$ eval `ssh-agent -s`

添加您的私钥使用ssh 添加

$ ssh-add ~/.ssh/id_rsa_key  
Enter passphrase for /home/user/.ssh/id_rsa_key:  
Identity added: /home/user/.ssh/id_rsa_key   
(/home/user/.ssh/id_rsa_key)  

检查键是否添加(参数是小写的L):

$ ssh-add -l  
2048 55:96:1a:b1:31:f6:f0:6f:d8:a7:49:1a:e5:4c:94:6f  
/home/user/.ssh/id_rsa_key (RSA)

尝试连接到你的 Git 服务器:

$ ssh git.example.com

现在您可以使用 Git 而无需额外的密码提示。

其他方法

https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-password-prompt

答案2

如果您已经在ssh-agent运行,那么您可以添加密钥,并且您必须输入一次密码,并且只需在该会话中输入一次。

ssh-add ~/.ssh/id_rsa

您没有说明您使用的是哪种操作系统,但如果碰巧使用的是 Linux 和 Gnome,那么“密码和密钥”应用程序(CLI 名称:)seahorse可以管理这些,以便在您登录时解锁它们(无需密码)。其他 Linux 桌面环境有自己的管理器。我不确定其他操作系统在这里做什么。

答案3

您可以使用以下命令轻松删除密钥的密码

ssh-keygen -p

在第一个提示符下,输入文件路径(或按 Enter 使用默认值)
第二个提示符下,输入旧密码下
一个提示符下,只需按 Enter 即可取消设置密码

看起来这是最简单的方法!

答案4

询问密码的主要原因是您的密钥已加密,请比较以下两个:

  • 未加密

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----            
    AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
    
  • 加密

    $ head ~/.ssh/id_rsa 
    -----BEGIN RSA PRIVATE KEY-----    
    Proc-Type: 4,ENCRYPTED
    DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
    
    ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
    

因此,您必须执行以下操作之一:

  1. 如果已加密,你可以尝试删除加密
  2. 您使用的密钥错误。如果您想使用不同的密钥,请指定其他文件或编辑您的~/.ssh/config并指定不同的身份文件(IdentityFile)。
  3. 运行ssh-add -l列出您的所有身份(然后与您的本地身份进行比较)并使用 Stash 仔细检查您是否使用了正确的密钥(它们存在于 Stash 配置中)。
  4. 如果您知道密码并且想要自动执行它,请尝试以下解决方法:

    PS="my_passphrase"
    install -vm700 <(echo "echo $PS") $PWD/my_pass
    DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
    

故障排除:

  1. 仔细检查您的 SSH 代理是否正在运行(eval "$(ssh-agent -s)")。
  2. 通过以下方式重新运行 git:GIT_TRACE=1 git pull或者使用GIT_SSH_COMMAND="ssh -vv"(Git 2.3.0+)来再次调试您的命令。
  3. 您可以尝试绕过要求输入密码(这会将其重定向到true),但我认为这不会有帮助。如果它要求输入密码,那一定是有原因的,而且基本上是必需的。

    DISPLAY= SSH_ASKPASS=/bin/true ssh-add
    

相关内容