git 使用ssh协议和密钥添加远程-如何解决问题?

omvjsjqw  于 2022-12-02  发布在  Git
关注(0)|答案(2)|浏览(131)

我尝试将远程地址添加到分支,但在尝试获取或执行git ls-remote时,权限被拒绝:

myuser@22.22.22.222: Permission denied (publickey).
fatal: Could not read from remote repository.

所以我想知道如何解决这个问题?我试过使用常规命令行和Git bash。
当我尝试不同的存储库和服务器时,它工作正常,以相同的方式与root用户连接:

git remote add prod ssh://root@11.111.11.11:22/myfolder/gittest.git

成功消息为:From ssh://root@22.222.22.22:22/myfolder/gittest.git
在有问题的服务器上,用户可以访问,我可以ssh没有问题,我同时指定一个键:

ssh -i .ssh/mykey.pem myuser@22.22.22.222

当我尝试将遥控器添加到服务器时,我执行以下操作:

git remote add prod ssh://myuser@22.222.22.22:22/myfolder/gittest.git

但是它需要.pem文件,所以我在.ssh/config中指定了它:

Host theserver
 HostName 22.22.22.222
 IdentityFile ~/.ssh/myfile.pem
 Port 22

我如何验证.pem文件是否被读取?如果我从config中删除了文本,是否没有关于“缺少密钥”或任何错误?
文件夹存在于服务器上:/myfolder/gittest.git(myfolder位于根目录)。我也尝试将repo移到不同的位置,将它移到用户的子目录中。但还是出现了同样的错误。
那么,我该如何找出问题所在呢?
如果它有任何用处,当我检查服务器上的用户时:id myuser我得到:

uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),4(adm),20(dialout),24(cdrom),
25(floppy),27(sudo),
29(audio),30(dip),33(www-data),44(video),46(plugdev),119(netdev),120(lxd)

更新日期:

我更新了配置,添加了UserIdentitiesOnly,并将远程地址更改为:

git remote add prod theserver:/myfolder/gittest.git

验证是否已读取配置文件

如果我从.ssh文件夹中删除配置文件,然后执行git ls-remote,它会显示Could not resolve hostname theserver,因此这意味着它在.ssh中时被找到。

验证连接

在我的另一个 * 工作 * 例子中,如果我从.ssh文件夹中删除密钥并执行git ls-remote,它会显示The authenticity of host '11.111.11.11' can't be established.(依此类推)-因此,这似乎验证了我已经建立了连接,但尚未进行身份验证。
但在有问题的服务器上,git ls-remote只给出:

ssh: connect to host 22.22.22.222 port 22: Connection timed out
fatal: Could not read from remote repository.

如果我把config中的IP地址完全改错了,也会出现同样的情况。所以这意味着它和密钥无关?我不确定它是否正确连接到了IP地址。但是我可以用正常的ssh访问。

更新:已解决

我的奇怪的情况与VPN有关。我必须激活VPN,因为这是SSH和服务器所需要的。然后它就工作了。(使用这种方式连接配置:(一月十七日)

ugmeyewa

ugmeyewa1#

你已经在你的配置中设置了(大部分)正确的主机别名。你的URL只需要引用它。所以按照你的定义定义theserver,但是也包括用户名。

Host theserver
 User myuser
 HostName 22.22.22.222
 IdentityFile ~/.ssh/myfile.pem
 Port 22

现在使用以下配置git

git remote add prod theserver:myfolder/gittest.git

当尝试连接到theserver时,SSH将查找具有该名称的Host条目。它 * 不会 * 执行的操作是获取ssh://myuser@22.222.22.22:22/myfolder/gittest.git并查找具有相同地址的Host块。

pxyaymoc

pxyaymoc2#

.ssh/config中使用IdentitiesOnly yes,如下所示

Host theserver
 HostName 22.22.22.222
 IdentityFile ~/.ssh/myfile.pem
 Port 22
 IdentitiesOnly yes

否则,将尝试默认的~/.ssh/id_rsa

相关问题