主頁 > 企業開發 > Git多個SSHmacos設定卡在一個帳戶上

Git多個SSHmacos設定卡在一個帳戶上

2022-01-02 09:11:33 企業開發

我在我的 macos 上使用兩個 Github SSH 密鑰時遇到問題,它卡在重新啟動后使用的第一個帳戶上。

Background:

我的 Mac 設定了兩個 Github 帳戶 - 一個用于personal存盤庫,一個用于存盤庫business商業回購是私人的。個人 repo 是公開的,但只有我的個人帳戶可以推送。

System setup:

我的系統和全域配置是空的

~/.ssh/配置:

# business
Host business
 HostName github.com
 User git
 IdentityFile ~/.ssh/id_rsa 
 UseKeychain yes
 AddKeysToAgent yes

#personal
Host personal
 HostName github.com
 User git
 IdentityFile ~/.ssh/id_rsa_personal
 UseKeychain yes
 AddKeysToAgent yes

個人reporoot/.git/config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[user]
    name = personalgithubaccount
    email = [email protected]

[remote "origin"]
    url = git@personal:mygithubuser/personalrepo
    fetch =  refs/heads/*:refs/remotes/origin/*
[branch "main"]
    remote = origin
    merge = refs/heads/main

businessreporoot/.git/config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[user]
    name = businessgithubaccount
    email = [email protected]
[remote "origin"]
    url = git@business:businessname/businessrepo
    fetch =  refs/heads/*:refs/remotes/origin/*
[branch "main"]
    remote = origin
    merge = refs/heads/main

一切都按預期進行,直到我重新啟動計算機。當我嘗試推送到我的個人存盤庫時,我注意到了這個問題。它錯誤地說企業帳戶無權推送到個人存盤庫。

I spent a number of hours trying through Stack Overflow and internet articles, most of which recommended deleting my macos Keychain git entries and removing osxkeychain from the config files, but no no avail. Finally, resorting to troubleshooting 101, I rebooted and viola, I could push to the personal account and it used my personal credential now instead of my business credential.

BUT -- then I went to git pull on the business repo and it said it was unable to find the repository. Figuring I had the reciprocal problem and it was now stuck on my personal account, I rebooted, pulled the business repo and it worked, but now I couldn't push to my personal repository because git was trying to use my business repo credential again.

我在鏈接到這些說明的這篇 SO 文章找到了一種解決方法似乎在重新啟動后運行將使 Git 尊重每個 repo 的 SSH 密鑰。但是隨后的 macos 重啟又把問題帶回來了。$ ssh-add -D

所以......問題是,為什么 Git 會被固定到重啟后使用的第一個 SSH 憑據,為什么清除 SSH 身份并$ ssh-add -D解決問題,以及如何改進我的設定,以便我不必做解決方法重啟后?

uj5u.com熱心網友回復:

TL; 博士

使用IdentitiesOnly yesIdentityFile小心地聲稱自己只是一個人。也就是說,稍微更新您的部分:

Host business
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
    IdentitiesOnly yes

然后確保您將 URLssh://business/path/to/work-repo.git用于作業存盤庫(或者business:path/to/repo.git如果您喜歡簡短版本)和ssh://personal/path/to/personal-repo.git個人存盤庫

所以......問題是,為什么 Git 會被固定到重啟后使用的第一個 SSH 憑證......

它不是,真的 - 這不是一個真正的 macOS 問題,它在任何 ssh 設定中都是通用的(盡管細節會因您是否使用 ssh-agent 以及如何使用而有所不同;macOS 設定您以便所有新的終端視窗默認情況下共享一個代理,這通常是您想要的)。理解這一點的技巧是了解 ssh 密鑰的作業原理:ssh 如何向您希望驗證的站點提供密鑰,以及 GitHub 如何使用這些 ssh 密鑰。

首先,讓我們定義一個 ssh 密鑰。它是:

  • 用于某些加密演算法的一串位元組;
  • 由公鑰和??私鑰構建。

通常,您將私鑰對自己保密并提供公鑰,或者用私鑰加密的東西,或者用兩個密鑰加密的東西,或者其他任何東西:細節并不是非常重要。我們知道(和關心)什么是公共密鑰被給出了,和私鑰不,我們可以假裝說的“鑰匙”出示給其他一些網站(如github.com)是公鑰.

現在,僅提供密鑰本身并不能證明您就是有人可能在較早的交易中偷偷復制了您的公鑰。因此,GitHub(或您連接的任何人)會向您發送一些加密的隨機資料,您只有擁有私鑰才能解密這些資料你解密它,從而向 GitHub 證明你不僅擁有你發送給他們的公鑰,而且你是相應私鑰的持有者。

那么,GitHub 考慮到這兩件事,現在知道你就是你聲稱的那個人。但你聲稱是誰? 為什么,誰擁有那個公鑰,就是誰。

因此,假設您有兩個鍵,它們都可以使用。今天,你目前的公鑰一個第一。他們向您發送一個挑戰,以測驗您是否真的是A的私有一半的持有者,并且您做出了正確的回應。好吧,這就解決了:你是A

明天,你叫他們起來和現在的公鑰第一。他們向您發送挑戰,您正確回應,然后就解決了。你是B

你就是你第一次提供的人所以你的人,據GitHub上來講,是你聲稱自己是第一次人

但是假設在星期六(如果明天是星期五)您提供公鑰A未能發送正確的回應,然后提供公鑰B發送正確的回應GitHub 現在會認為你是B

所以 GitHub真的相信你就是你成功宣稱的那個人。這意味著,即使你總是提供一個第一,撤銷你的私鑰一個就足以讓你成為這或多或少是你ssh-add -D所做的。(你的 ssh 可能很聰明,如果它沒有正確的私鑰,甚至不提供公鑰,因為如果你計劃在挑戰中失敗,那么聲稱自己是A毫無意義。當然,無論哪種方式都有效,但總的來說,最好不要用一百萬次按鍵嘗試過多地敲門:人們或正確編程的計算機會產生懷疑。)

最后,這意味著您必須首先確保 Git不會提供錯誤的密鑰。使用代理時,您可以添加任意數量的密鑰,ssh 將能夠“查看”所有密鑰。這將提供所有的作業重點對的,以某種順序,除非你使用IdentitiesOnly yes如果您確實使用此行,它將僅提供有IdentityFile行和/或-i選項的鍵。(請注意,您可以列出多個檔案,而 ssh 仍會嘗試多個密鑰,無論順序如何。)

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/400650.html

標籤:混帐 苹果系统 github ssh ssh-keys

上一篇:Git在第一次提交時不斷在.gitignore中添加檔案并推送到遠程

下一篇:gitcherry-pick檔案沖突,我想使用頭腦中的那個

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more