使用ssh协议前缀时出现"ssh permission denied"错误

6

我尝试将ssh密钥添加到我的GitLab帐户中,以便通过npm使用它。

我遵循了https://docs.gitlab.com/ee/ssh/的指导,成功地将我的密钥添加到了账户中。

ssh -T git@gitlab.com

发送消息欢迎来到Gitlab,用户名工作正常。

但是ssh -T ssh://git@gitlab.com无法工作并显示以下错误信息:

权限被拒绝(publickey)。

当我在我的Node项目上运行npm install时,在package.json文件中添加我的Node模块作为依赖项,返回以下错误:

npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@gitlab.com/myproject/myproject.git
npm ERR!
npm ERR! Permission denied (publickey).
npm ERR! fatal: Could not read from remote repository.
npm ERR!
npm ERR! Please make sure you have the correct access rights
npm ERR! and the repository exists.
npm ERR!
npm ERR! exited with error code: 128

我在package.json中添加了以下依赖项:
"my-project": "git@gitlab.com:myproject/myproject.git",

我对ssh和密钥配对不太熟悉,如果有人能告诉我我的配置出了什么问题,那将帮助我很多,谢谢。


你能把 ssh -vvvvT git@gitlab.com 和 ssh -vvvvT ssh://git@gitlab.com 粘贴到某个地方吗? - khrm
仍然有问题吗? - abestrad
2个回答

8

有时候被下面这句话(指自己)误导,感觉有点好笑:

ssh -T ssh://git@gitlab.com

该命令实际上并不需要协议前缀,而是需要以一个用户名为前缀或不带前缀的主机名,后面可以跟随一个at符号,正如手册页面所述:

ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] [-D [bind_address:]port] [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file] [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] [user@]hostname [command]

在此示例中,将ssh://git作为用户名。这就是为什么它不能登录,因为您连接时使用的用户名必须是git而不是ssh:// git 。

0

"SSH"、"ssh" 和 "ssh://" 有什么区别?

SSH是一种传输层协议。链接

ssh 是一个OpenSSH SSH 客户端。OpenSSH 是使用 SSH 协议进行远程登录的连接工具。链接

ssh:// 是一个统一资源定位符(URL)。链接


ssh -T git@gitlab.com - 使用ssh客户端,使用用户名git登录到gitlab.com

ssh -T ssh://git@gitlab.com - 使用ssh客户端,使用用户名ssh://git登录到gitlab.com(感谢Amessihel提供详细答案)

ssh://git@gitlab.com/myproject/myproject.git - 指示访问此URL的应用程序需要ssh客户端进行访问,并且如果操作系统上安装了ssh客户端,则打开SSH客户端,使用用户名git登录到gitlab.com并访问myproject/myproject.git repo。Chrome可以理解此URL,将此URL复制到chrome地址栏中并按Enter键。

就像任何URL一样,例如https://google.com。许多客户端支持HTTP,如wget、curl或Web浏览器,对于HTTP和HTTPS URL,操作系统将打开Web浏览器。


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