首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  程序员

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

  •  
  •   yixinlove · 24 天前 · 1748 次点击

    在本地有多个 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。

    14 回复  |  直到 2019-11-14 09:29:22 +08:00
        1
    chenset   24 天前
    我的:

    # 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   24 天前
    主要是用 eval $(ssh-agent) , 而不是 ssh-agent
        3
    xidaduo   24 天前
    将 Host 也改成 HostName 一样的内容,例如

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

    或者在 config 里面加上
    PreferredAuthentications publickey


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

    @chenset @supersu @webshe11 同时感谢各位大佬的建议。
        10
    cmingxu   24 天前
    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   24 天前
    我用 sshmenu
        12
    hlx   24 天前
    @chenset windows 可以在 Git 安装目录下的 etc 文件夹下的 bash.bashrc 文件最后 加入 eval $(ssh-agent -s), 换行 ssh-add ~/.ssh/id_rsa_key 然后每次打开 git bash 窗口就会自动加入 key 啦, 很方便, 哈哈
        13
    genius2k   24 天前
    server 用的什么 git 服务端?添加公钥了吗?
        14
    yixinlove   23 天前
    统一回复,首先谢谢大佬的建议,然后:
    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
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2292 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 14:04 · PVG 22:04 · LAX 06:04 · JFK 09:04
    ♥ Do have faith in what you're doing.