我使用 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 而无需额外的密码提示。
其他方法
答案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
因此,您必须执行以下操作之一:
- 如果已加密,你可以尝试删除加密。
- 您使用的密钥错误。如果您想使用不同的密钥,请指定其他文件或编辑您的
~/.ssh/config
并指定不同的身份文件(IdentityFile
)。 - 运行
ssh-add -l
列出您的所有身份(然后与您的本地身份进行比较)并使用 Stash 仔细检查您是否使用了正确的密钥(它们存在于 Stash 配置中)。 如果您知道密码并且想要自动执行它,请尝试以下解决方法:
PS="my_passphrase" install -vm700 <(echo "echo $PS") $PWD/my_pass DISPLAY= SSH_ASKPASS=$PWD/my_pass ssh-add - && rm -v my_pass
故障排除:
- 仔细检查您的 SSH 代理是否正在运行(
eval "$(ssh-agent -s)"
)。 - 通过以下方式重新运行 git:
GIT_TRACE=1 git pull
或者使用GIT_SSH_COMMAND="ssh -vv"
(Git 2.3.0+)来再次调试您的命令。 您可以尝试绕过要求输入密码(这会将其重定向到
true
),但我认为这不会有帮助。如果它要求输入密码,那一定是有原因的,而且基本上是必需的。DISPLAY= SSH_ASKPASS=/bin/true ssh-add