git 使用 ssh 总是提示需要输入密码

2019-11-13 09:05:05 +08:00
 yixinlove

在本地有多个 ssh key,使用 ssh-config 文件配置了访问服务器的 key id_rsa_a 和访问代码库的 key id_rsa_code,具体 config 如下:

Host git
  HostName xxx.gitlab.com
  User spiderman
  IdentityFile ~/.ssh/id_rsa_code
  AddKeysToAgent yes

Host server
  HostName 10.10.11.111
  User xxx
  IdentityFile ~/.ssh/id_rsa_server
  AddKeysToAgent yes

使用命令 ssh server 时没有问题,不需要密码可以登录,但是使用 git 时,总是提示需要输入密码。从网上查找说是需要把 id_rsa_code 这个加入到 ssh-agent 里,但通过 ps -ef 可以看到有一个 ssh-agent 进程,只是在登录用户下做 ssh-add -L 时提示 clould not open a connection to your authentication agent.

请教下这种情况是什么原因?我之前电脑没有出现这种问题,配置 config 之后就可以用多个 key 了。现在是所有机器只要多个 ssh key 都会出现这个问题。 出现问题的环境:

  1. manjaro,主力开发机,已经启动 gnome-keyring 时没问题,但是从其他机器 ssh 远程到这台机(同一个用户)就会报上面错误;
  2. WSL 里使用 git 也会出现上述错误。

但另一个服务器 centos 里只有一个 ssh key 的情况下,不会出现,且 centos 里都没有启动 ssh-agent。

5156 次点击
所在节点    程序员
14 条回复
chenset
2019-11-13 09:18:57 +08:00
我的:

# windows (下面的命令要在 git bash 中执行)
eval $(ssh-agent -s)
ssh-add /c/Users/.ssh/id_rsa

# mac
Host *
UseKeychain yes
AddKeysToAgent yes
User root
Host 10.0.0.1
IdentityFile ~/.ssh/1.key
Host 10.0.0.2
IdentityFile ~/.ssh/2.key

#ubuntu
# eval $(ssh-agent) 命令行执行
Host *
AddKeysToAgent yes
User root
Host github.com
IdentityFile ~/.ssh/github.key

#centos
# eval $(ssh-agent) 命令行执行
Host *
User root
Host github.com
IdentityFile ~/.ssh/github.key
chenset
2019-11-13 09:20:08 +08:00
主要是用 eval $(ssh-agent) , 而不是 ssh-agent
xidaduo
2019-11-13 09:20:36 +08:00
将 Host 也改成 HostName 一样的内容,例如

Host xxx.gitlab.com
HostName xxx.gitlab.com

或者在 config 里面加上
PreferredAuthentications publickey


这两个解决方案都试一下
chenset
2019-11-13 09:21:19 +08:00
supersu
2019-11-13 09:33:06 +08:00
yixinlove
2019-11-13 09:35:24 +08:00
@chenset 嗯,在网上找到方式,也是执行 `eval $(ssh-agent -s)` 或者 `ssh-agent /bin/bash` (或者 zsh )。但是这都需要手动执行一次,我理解的是配置了 config 之后能够自动使用 key,不需要手动加载了。
webshe11
2019-11-13 09:40:31 +08:00
确认一下,.git/config 里面的 origin url 该不会还是 http/https 协议的吧?那样的话根本没走 ssh
yixinlove
2019-11-13 09:41:26 +08:00
@webshe11 没有,确认是走的 git 协议。
yixinlove
2019-11-13 09:45:11 +08:00
@xidaduo 神人,把 Host 和 HostName 配置成一样的,就可以了。非常感谢。

@chenset @supersu @webshe11 同时感谢各位大佬的建议。
cmingxu
2019-11-13 10:04:25 +08:00
clone 时候用的是 git://协议还是 https/http 协议? 如果是 http/https, 那么底层走的是 http/https 协议来传输 git object,如果是 git 协议,底层用 ssh 协议(这时候才是 ssh 验证)。

1, http 协议能否记住密码和 git client 实现有关系,看下 crendential-helper 的配置,git config --global list 查看下。
2, 如果是 git 协议, 可以指定 identify file 来保证使用正确的私钥。GIT_SSH_COMMAND='ssh -i private_key_file' git ...
skiy
2019-11-13 10:11:43 +08:00
我用 sshmenu
hlx
2019-11-13 11:10:57 +08:00
@chenset windows 可以在 Git 安装目录下的 etc 文件夹下的 bash.bashrc 文件最后 加入 eval $(ssh-agent -s), 换行 ssh-add ~/.ssh/id_rsa_key 然后每次打开 git bash 窗口就会自动加入 key 啦, 很方便, 哈哈
genius2k
2019-11-13 12:09:36 +08:00
server 用的什么 git 服务端?添加公钥了吗?
yixinlove
2019-11-14 09:29:22 +08:00
统一回复,首先谢谢大佬的建议,然后:
1. git 使用的是 git 协议,走 ssh
2. server 使用的也是 git 协议,无需启动 ssh-agent,因为只有一个 ssh-key,所以也没有配置 ssh config,但能正常使用
3. 根据楼上的回复,把 ssh config 里对于 git 使用的配置 Host 和 HostName 写成一样,即 git url 域名即可,也不需要 ssh-agent 就可以使用了,不需要输入密码
4. eval $(ssh-agent -s) 每次都会起一个 ssh-agent 进程,我觉得没必要,所以才发帖。

@genius2k @cmingxu @hlx

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/619011

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX