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

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

  •  
  •   yixinlove · 2019-11-13 09:05:05 +08:00 · 5378 次点击
    这是一个创建于 1836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在本地有多个 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
    chenset
        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
    chenset
        2
    chenset  
       2019-11-13 09:20:08 +08:00
    主要是用 eval $(ssh-agent) , 而不是 ssh-agent
    xidaduo
        3
    xidaduo  
       2019-11-13 09:20:36 +08:00
    将 Host 也改成 HostName 一样的内容,例如

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

    或者在 config 里面加上
    PreferredAuthentications publickey


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

    @chenset @supersu @webshe11 同时感谢各位大佬的建议。
    cmingxu
        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 ...
    skiy
        11
    skiy  
       2019-11-13 10:11:43 +08:00
    我用 sshmenu
    hlx
        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 啦, 很方便, 哈哈
    genius2k
        13
    genius2k  
       2019-11-13 12:09:36 +08:00
    server 用的什么 git 服务端?添加公钥了吗?
    yixinlove
        14
    yixinlove  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1500 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:14 · PVG 01:14 · LAX 09:14 · JFK 12:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.