簡體   English   中英

如何在沒有密鑰的情況下通過 ssh 從公共倉庫 git pull?

[英]How to git pull from public repo via ssh without a key?

我有一個公共回購, https:\/\/github.com\/rlpowell\/config<\/a> 。 我曾經能夠在沒有任何 ssh 密鑰(即來自 cron)的情況下運行 git pull,並且它工作正常,使用 git@github.com:rlpowell\/config.git URL(即 SSH URL)。 這不再有效,我不知道為什么,但它確實<\/em>適用於我的兩個朋友。

我希望能夠在沒有 ssh 密鑰的情況下 git pull 一個公共 repo,或者至少了解為什么它對我不起作用而對其他人起作用。

這是一個朋友在嘗試我的測試用例:

$ git clone git@github.com:rlpowell/config.git  ; cd config ; (unset SSH_AUTH_SOCK ; ssh-add -l ; git pull )
Cloning into 'config'...
Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hosts.
remote: Counting objects: 1061, done.
remote: Total 1061 (delta 0), reused 0 (delta 0), pack-reused 1061
Receiving objects: 100% (1061/1061), 544.42 KiB | 495.00 KiB/s, done.
Resolving deltas: 100% (632/632), done.
Checking connectivity... done.
Could not open a connection to your authentication agent.
Already up-to-date.

嘗試先運行此命令:

ssh -o PreferredAuthentications=password -o PubkeyAuthentication=no github.com

然后git pull回來。

我只是嘗試了沒有密鑰,我確認它無法工作(沒有SSH密鑰):

$ git clone git@github.com:rlpowell/config.git
Cloning into 'config'...
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

這是因為GitHub不會通過SSH授權匿名訪問(而不是https),因為其他git repo服務器決定這樣做( 如Gogitsgo-gitea

GitHub 確實提到

SSH URL通過SSH(一種安全協議)提供對Git存儲庫的訪問。
要使用這些URL,您必須在計算機上生成SSH密鑰對,並將公鑰添加到您的GitHub帳戶。

(強調必須

為什么? (在2015年問) 雖然可以將sshd配置為允許匿名訪問 ,但是沒有公共站點會考慮設置它:它的安全風險太大了。

需要在沒有特定密鑰的情況下工作

如果您需要匿名訪問,可以使用:

  • 一個https URL
  • 一個git URL: git://github.com/<user>/<repo> ,雖然它使用的是端口9418,它通常在企業環境中被阻止。

問題似乎與ssh鍵有關,至少響應它:

Enter passphrase for key '/home/rlpowell/.ssh/id_rsa':
Permission denied (publickey).

所以你需要將你的公鑰添加到github

將新SSH密鑰添加到您的GitHub帳戶

你也可以運行:

ssh -T git@github.com

檢查與github的ssh連接

它是一個公共的GitHub倉庫,您只想從中提取,因此您可以使用HTTPS URL:

https://github.com/rlpowell/config.git

https://github.com/rlpowell/config.git

對於公共回購,您不需要任何密碼。 您可以使用他們的https鏈接直接克隆:

例如git clone https://github.com/rlpowell/config.git

我想你不能用SSH做到這一點。 這是一個很好的解釋:

GitHub協議比較

如果你想克隆和拉動沒有任何密鑰的東西使用HTTP(S)。

所以

git clone http://github.com/rlpowell/config.git
Klone nach 'config' ...
warning: Leite nach https://github.com/rlpowell/config.git/ um
remote: Counting objects: 1234, done.
remote: Total 1234 (delta 0), reused 0 (delta 0), pack-reused 1234
Empfange Objekte: 100% (1234/1234), 2.01 MiB | 1.07 MiB/s, Fertig.
Löse Unterschiede auf: 100% (758/758), Fertig.

“.git / config”將如下所示:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = http://github.com/rlpowell/config.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

如果您已經克隆或使用git config ,您可以稍后更改該文件

使用這些設置,您可以隨時git pull

為什么使用url git@github.com:rlpowell/config.git不起作用是由於以下原因:

條目git@github.com:rlpowell將強制您使用SSH進行身份驗證。 如果您想要SSH身份驗證,Github要求您使用密鑰對。

如果您想擁有一個自動cronjob用戶並仍然使用SSH,請為該用戶創建一個密鑰對,並將公共用戶上傳到gitlab。

但如果您只想克隆和拉取,HTTPS將綽綽有余。 順便說一句,通過HTTPS進行驗證也是可能的。 如果您嘗試推送更改,Github會詢問您的用戶名和密碼。 如果您使用的是cronjobs,建議不要這樣做。

您的證書有問題。 簡單的解決方案就是創建一個新的並替換舊的。

問題可能是由幾個問題引起的,例如:錯誤的主機文件輸入,調用的ssh證書等等。

所以最好的辦法是創建一個新證書並對其進行測試。

只需按照這些步驟操作即可立即設置您的ssh密鑰:

  • 生成新的ssh密鑰(如果已有密鑰,則跳過此步驟)
    ssh-keygen -t rsa -C "your@email"

  • 將密鑰設置在home/.ssh目錄(或Users/<your user>.ssh在windows下)后,打開它並復制內容


如何將sh鍵添加到github帳戶?

  • 登錄github帳戶
  • 點擊右上角的牧場主(設置)
    github帳戶settigns
  • 單擊SSH keys
    ssh關鍵部分
  • 單擊Add ssh key
    添加ssh密鑰
  • 粘貼您的密鑰並保存

你們都准備去了:-)

如果進行身份驗證, 則無法連接到SSH服務器。

因此, 如果沒有注冊的SSH密鑰,就無法克隆或覆蓋SSH。

您有兩種選擇:

  • 以具有與GitHub帳戶關聯的SSH密鑰的用戶身份運行cron作業(如果需要,可以使用配置文件指向特定的密鑰文件)。
  • 使用HTTPS。

$ git clone https:// '...' 克隆到 'Africa-Data-School'... 遠程:枚舉對象:74,完成。 遠程:計數對象:100% (74/74),完成。 遠程:壓縮對象:100% (59/59),完成。 遠程:總計 74(增量 24),重用 64(增量 15),打包重用 0 接收對象:100%(74/74),23.66 MiB | 77.00 KiB/s,完成。 解決增量:100% (24/24),完成。 更新文件:100% (36/36),完成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM