我通过 ssh 连接到远程主机(linux、fedora),我想在那里进行 ssh 操作(git 和 bitbucket)。那台机器上正在运行 ssh-agent,
$ ps -e|grep sh-agent
2203 ? 00:00:00 ssh-agent
Run Code Online (Sandbox Code Playgroud)
但是当我想 git 时,它需要我输入密码
$ git pull
Enter passphrase for key '/user/wgong/home/.ssh/id_rsa':
Run Code Online (Sandbox Code Playgroud)
注意:如果我在本地操作那台机器,它不会要求我输入密码
小智 142
在使用 Git 之前,将您的密钥添加到ssh-agent
如果未启动则启动ssh-agent:
$ eval `ssh-agent -s`
Run Code Online (Sandbox Code Playgroud)
使用ssh-add添加您的私钥
$ 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)
Run Code Online (Sandbox Code Playgroud)
检查是否添加了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)
Run Code Online (Sandbox Code Playgroud)
尝试连接到您的 Git 服务器:
$ ssh git.example.com
Run Code Online (Sandbox Code Playgroud)
现在您可以使用 Git 而无需额外的密码提示。
ams*_*ams 31
如果您已经在ssh-agent
运行,那么您可以添加密钥,并且您必须输入一次密码短语,并且仅为该会话输入一次。
ssh-add ~/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
您没有说明您使用的是什么操作系统,但如果它恰好是 Linux 和 Gnome,那么“密码和密钥”应用程序(CLI 名称:)seahorse
可以管理这些,以便在您登录时将它们解锁(不需要密码) . 其他 Linux 桌面环境有自己的管理器。我不确定其他操作系统在这里做什么。
小智 11
您可以使用以下命令轻松删除密钥的密码
ssh-keygen -p
Run Code Online (Sandbox Code Playgroud)
在第一个提示上,输入文件路径(或按回车使用默认值)
第二个提示,输入旧密码
下一个提示,只需按回车即可取消设置密码
看起来这是最简单的方法!
小智 8
在 Mac 上,添加UseKeyChain
到~/.ssh/config
nano ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)
并添加以下内容
Host *
UseKeychain yes
Run Code Online (Sandbox Code Playgroud)
询问密码的主要原因是您的密钥已加密,比较这两个:
未加密
$ head ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
AIIAogIBAAKCAQEAtOJQ0Z3ZbyzuknnHqn5oMCmNf8zGmERhW+g5Eftf9daZ5qvZ
Run Code Online (Sandbox Code Playgroud)加密的
$ head ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,A95215C9E9FE00B8D73C58BE005DAD82
ZAzLq/LbHSfOVkXtQz6M6U8yuAx2lIu9bH/k7ksgat92IDjZntRrT1XMpkYtjB+0
Run Code Online (Sandbox Code Playgroud)因此,您必须执行以下操作之一:
~/.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
Run Code Online (Sandbox Code Playgroud)故障排除:
eval "$(ssh-agent -s)"
)。GIT_TRACE=1 git pull
或使用GIT_SSH_COMMAND="ssh -vv"
(Git 2.3.0+) 再次调试命令。您可以尝试绕过询问密码(这会将其重定向到true
),但我认为这不会有帮助。如果有要求,那是有原因的,而且基本上是必需的。
DISPLAY= SSH_ASKPASS=/bin/true ssh-add
Run Code Online (Sandbox Code Playgroud)该ssh-add
程序启动一个可以保存(并提供)您的密码的代理。远程使用它的方法是在交互式 shell 的父级中(这样代理就不会停止)。
以下是几个相关问题:
现在...远程连接,通常您的命令不会这样登录,因此它不会启动ssh-add
。您可以通过执行一个脚本来解决这个问题
ssh-agent
ssh-add
弱点是第二步:您仍然会收到输入密码的提示,除非您使用没有密码的密钥来削弱安全性。有些人这样做,大多数人反对。