SSH GitLab拉取总是要求密码

4
(特指GitLab!没有与GitHub的问题)
我正在尝试创建一个脚本,从main GitLab分支中拉取项目而无需输入密码。 一些远程计算机具有卡座模式项目。 手动连接它们有点无聊 - 而不是拥有一个自动拉取的cron-job。

我已经设置使用SSH,并创建和添加了我的SSH ed25519密钥。
在./.git/config中添加了正确的url,如下所示:

[remote "origin"]
    url = git@gitlab.com:<ME>/<REPO>.git

其中<ME><REPO>是我的用户名和仓库名称 :)

使用git pullfetch始终要求输入密码,但在我的GitHub仓库上不是这样。

我唯一成功让它工作的方法是使用个人访问令牌,如下所示:

[remote "origin"]
    url = https://oauth2:<MY P. A. TOKEN>@gitlab.com/<ME>/<REPO>.git

但我不喜欢token明文存储,也不想在SSH握手之外做其他事情。

我是否忽略了GitLab特有的设置?我能够搜索到的每个帮助页面都只是讲述了如何设置正确的SSH URI(git@gitlab.com.....等),而这些步骤我已经完成了。但每次我触发git pull时,它总是会要求输入密码

环境为Windows,使用Git Bash。

非常感谢任何帮助、技巧或见解。


你的SSH密钥有密码保护吗? - Adam Marshall
1
@AdamMarshall 是的,这是我犯的一个愚蠢错误。 - Roko C. Buljan
3个回答

1

我在Windows上也遇到了同样的问题,即使运行ssh -T git@gitlab.domain.com也不起作用!解决方案比我想象的要简单得多:我需要以管理员身份打开git bash。


1
嘿,只是提醒其他人,在这里使用时,如果你正在远程服务器上使用git,这个方法不起作用。当然,“以管理员身份运行”设置仅适用于本地。 - LabGecko

1
我刚刚为我的gitlab.com仓库解决了这个问题:我只是按照他们在使用SSH密钥与GitLab通信教程中的步骤进行操作。
在那里,他们解释了如何创建密钥,但由于我的密钥已经存在,所以我只需要按照配置SSH以指向不同目录部分的步骤进行操作。它们只有:
  1. 输入以下命令
  2. eval $(ssh-agent -s)`
    ssh-add <私钥的完整路径>
    

    在Linux中,SSH密钥通常保存在文件夹~/.ssh/

  3. 编辑~/.ssh/config文件,添加以下行
  4. Host gitlab.com`
       PreferredAuthentications publickey
       IdentityFile <私钥的完整路径>
    

-1
你的ssh密钥是由一个密码短语生成的,这就是为什么它会要求你输入密码短语。

无需密码的SSH登录

你的目标

你想使用Linux和OpenSSH来自动化你的任务。因此,你需要从主机A / 用户a自动登录到主机B / 用户b。你不想输入任何密码,因为你想在shell脚本中从a调用ssh。

如何做到这一点 首先作为用户a登录到A主机并生成一对认证密钥。不要输入密码:

a@A:~> ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase: (THIS IS THE CATCH, just press enter here to leave it empty): 
Enter same passphrase again: (press enter again)
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

a@A:~> ssh-copy-id remote_username@remote_domain

or

a@A:~> ssh-copy-id remote_username@remote_IP

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
remote_username@remote_domain password: 

在那里,它会要求您输入远程服务器上远程用户的密码

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p '22' 'remote_username@remote_domain'"
and check to make sure that only the key(s) you wanted were added.

现在尝试使用登录

a@A:~> ssh remote_username@remote_domain

你应该进入


来源:http://www.linuxproblem.org/art_9.html


Gitlab文档明确指示您使用密码短语:https://docs.gitlab.com/ee/ssh/#generate-an-ssh-key-pair - user32882
2
是的,因为这样更安全。但是制作没有密码的ssh密钥的唯一目的是让您无需输入密码,只需自动ssh到服务器。可能超过95%的开发人员不设置密码,因为我们很懒,而且密钥被盗或被黑客攻击的机会与某人窃取您的笔记本电脑/个人电脑的机会相同。 - lewis4u
正确的方法是通过设置~/.ssh/config来完成。这样可以避免您的密钥被盗/被黑客攻击,同时也不需要在每次拉取或推送时输入密码。 - user32882
ssh-copy-id my_gitlab_username@gitlab.com 结果显示:“my_gitlab_username@gitlab.com: 权限被拒绝(publickey,keyboard-interactive)”... 注意操作系统为 Linux Mint 20。您建议的另一种解决方案是“remote_username@remote_IP”... 我如何找到远程 IP(即 Gitlab 的 IP)? - mike rodent
1
gitlab.com是GitLab的官方网站...你不应该连接到那个网站...所有这些示例都是针对自托管的GitLab...当你创建自己的公共服务器(购买域名和主机存储提供商)时,希望这可以帮到你。 - lewis4u
谢谢!我有一个有趣的边缘案例:可以使用我的没有密码的SSH密钥连接到多个服务器,但是一个特定的服务器总是要求输入密码。除了我知道的钓鱼尝试之外,可能是什么原因导致这种情况? - LabGecko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接