在本地有多个 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 都会出现这个问题。 出现问题的环境:
但另一个服务器 centos 里只有一个 ssh key 的情况下,不会出现,且 centos 里都没有启动 ssh-agent。
1
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 |
2
chenset 2019-11-13 09:20:08 +08:00
主要是用 eval $(ssh-agent) , 而不是 ssh-agent
|
3
xidaduo 2019-11-13 09:20:36 +08:00
将 Host 也改成 HostName 一样的内容,例如
Host xxx.gitlab.com HostName xxx.gitlab.com 或者在 config 里面加上 PreferredAuthentications publickey 这两个解决方案都试一下 |
4
chenset 2019-11-13 09:21:19 +08:00
|
5
supersu 2019-11-13 09:33:06 +08:00 via Android
|
6
yixinlove OP @chenset 嗯,在网上找到方式,也是执行 `eval $(ssh-agent -s)` 或者 `ssh-agent /bin/bash` (或者 zsh )。但是这都需要手动执行一次,我理解的是配置了 config 之后能够自动使用 key,不需要手动加载了。
|
7
webshe11 2019-11-13 09:40:31 +08:00
确认一下,.git/config 里面的 origin url 该不会还是 http/https 协议的吧?那样的话根本没走 ssh
|
9
yixinlove OP |
10
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 ... |
11
skiy 2019-11-13 10:11:43 +08:00
我用 sshmenu
|
12
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 啦, 很方便, 哈哈
|
13
genius2k 2019-11-13 12:09:36 +08:00
server 用的什么 git 服务端?添加公钥了吗?
|
14
yixinlove OP 统一回复,首先谢谢大佬的建议,然后:
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 |