1. 程式人生 > >使用不同的SSH金鑰執行git命令

使用不同的SSH金鑰執行git命令

一般來說,通過Git命令對遠端倉庫進行操作的時候,都需要經過身份驗證,常用的身份驗證方式有兩種:

  • HTTPS
  • SSH

為了省去每進行一次Git操作就要輸入使用者名稱和密碼的麻煩(HTTPS協議),相信大部分人都是使用SSH協議進行身份驗證。SSH協議的使用也很簡單,在本地生成一個公鑰私鑰對,再把公鑰上傳到SSH伺服器(這裡以github.com為例),每次對遠端伺服器進行操作的時候,本地生成一些隨機的字串並用私鑰進行加密以後傳送到遠端伺服器,遠端伺服器使用公鑰進行解密,若解密成功則身份驗證通過。

但是現在遇到了一個問題,如果同時要對兩個不同使用者的github倉庫進行Git命令操作,那麼如何為每一次操作指定不同使用者的私鑰檔案呢?

對於SSH命令指定不同的私鑰檔案非常簡單:

 ➜  ssh -i ~/.ssh/id_rsa -T [email protected]
Hi 9394974! You've successfully authenticated, but GitHub does not provide shell access.

只要通過-i引數指定私鑰所在的地址即可。

Git命令可沒有提供-i引數來指定私鑰檔案地址,但是git命令既然是基於SSH協議進行操作的,那麼只要能更改SSH的配置檔案即可,SSH協議可以從三個地方來讀取配置(可以通過man ssh_config命令檢視):

 ssh(1) obtains configuration data from the following sources in the following order:

      1.   command-line options
      2.   user's configuration file (~/.ssh/config)
      3.   system-wide configuration file (/etc/ssh/ssh_config)

 For each parameter, the first obtained value will be used.  The configuration files contain sections separated by ``Host'' specifications, and that section
 is only applied for hosts that match one of the patterns given in the specification.  The matched host name is usually the one given on the command line (see
 the CanonicalizeHostname option for exceptions.)

可以看到,SSH協議讀取配置檔案時是按照順序讀取,一旦拿到需要的引數就不再繼續讀取。那麼,在配置另一個使用者的配置檔案時,可以選擇新建~/.ssh/config檔案。

# ~/.ssh/config
Host another_repo
HostName github.com
User git
IdentityFile ~/.ssh/another_repo_rsa

在新建了一個Host以後,假設another_repo的git協議url為[email protected]:another_user/another_repo.git,則在clone專案時需要改為:

git clone another_repo:another_user/another_repo.git
即格式為{Host}
:{User}/{project.git}

在clone專案下來以後,還需要修改git專案的remote,把原來的origin刪除:

git remote rm origin
git remote add origin another_repo:another_user/another_repo.git

此時訪問遠端倉庫就沒有任何問題了。

最後值得注意的是,在對another_repo進行push的時候,身份標記還是以第一個使用者的身份標記,如果需要修改為第二個使用者的身份標記,需要修改git專案的config:

git config --local user.name "another_user"
git config --local user.email "another_user@email.com"

相關推薦

使用不同SSH執行git命令

一般來說,通過Git命令對遠端倉庫進行操作的時候,都需要經過身份驗證,常用的身份驗證方式有兩種: HTTPS SSH 為了省去每進行一次Git操作就要輸入使用者名稱和密碼的麻煩(HTTPS協議),相信大部分人都是使用SSH協議進行身份驗證。SSH協議的使

git 生成ssh

首先,檢查下自己之前有沒有已經生成: 在開始選單中開啟git下的git bash(當然,在其他目錄下開啟git bash也是一樣的): 然後執行: cd ~/.ssh 如果能進入到.ssh檔案目錄下 ,則證明,之前生成過.ssh祕鑰,可以直接使用裡面

Pycharm配置git提交的賬戶以及SSH

Pycharm配置git提交的賬戶: git 修改當前的project的使用者名稱的命令為:**git config user.name 你的目標使用者名稱**; git 修改當前的project提交郵

初次安裝git配置使用者名稱和郵箱以及git如何使用ssh

一、初次安裝git需要配置使用者名稱和郵箱,否則git會提示:please tell me who you are. 你需要執行命令來配置你的使用者名稱和郵箱: $ git config --global user.name "******" $ git c

執行git命令時出現fatal: 'origin' does not appear to be a git repository錯誤

遠程 from pos pull reader could not span style fat 在執行git pull origin master時出現:   fatal: ‘origin‘ does not appear to be a git repository  

Python ssh 遠程執行shell命令

nec passwd add span err hcl shc tdi print 工具 python paramiko 遠程執行命令 import paramiko ssh = paramiko.SSHClient() key = paramiko.AutoAddPo

如何配置SSH訪問Git倉庫

SSH公鑰介紹 現在的程式碼管理平臺都支援使用 SSH 協議來訪問 Git 倉庫,提供賬戶 SSH 公鑰和專案 SSH 公鑰設定。 這樣既能提升安全性,也能使操作更加便捷(因為使用 SSH 協議來訪問 Git 倉庫,不需要每次連結都輸入賬號和密碼。)。有關 SSH 更多資訊可參考 百度百科。 新增公鑰後,

如果不配置SSH使用git遠端倉庫會怎麼樣?

看了很多GIT的資料,發現git依賴ssh連結遠端倉庫,自然公鑰是需要的。 好奇心是害死人的,我試驗了下: [email protected]:/btsom/SCM/learn-git# git clone [email protected]:/bts

idea中Terminal終端無法執行GIT命令: touch README.md問題解決

=============================記錄Start============================= **為了這個問題折騰了半天...在這裡記錄下,方便大參考,歡迎評論提

如何設定SSH

關於SSH金鑰 SSH金鑰提供一種更為安全的虛擬專有伺服器登入機制,即利用SSH而非單純依靠密碼完成登入。與易被竊取的密碼不同,SSH金鑰幾乎無法以暴力方式破解。生成的金鑰對為我們提供兩條字串,即公鑰與私鑰。大家可以將公鑰儲存在任意伺服器,並利用配備有私鑰

Ubuntu hadoop 偽分散式環境搭建步驟+ssh(免密碼登入)配置

27408 NameNode 28218 Jps 27643 SecondaryNameNode 28066 NodeManager 27803 ResourceManager 27512 DataNode 進入下面的網頁查詢具體資料 http://192.168.1.101:50070 (HD

ANSIBLE實現SSH的分發

1、先生成金鑰 [[email protected] ansible]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (

SourceTree生成SSH(拉取GitLab程式碼)

1.為什麼 安全,好用,免密碼,逼格高 2.流程 1.安裝Git客戶端,安裝SourceTree客戶端,我的版本分別為:Git:2.9.3,SourceTree2.3.5,注意安裝最好不要

執行Git命令時出現各種 SSL certificate problem 的解決辦法

比如我在windows下用git clone gitURL 就提示  SSL certificate problem: self signed certificate 這種問題,在windows下出現得頻率高些。我估計主要是git本身就是基於linux開發的,在windo

Mac 下source tree 與 gitlab 新增 ssh

因為專案要使用 gitlab 來管理程式碼,所以還是使用 sourcetree 客戶端來管理自己的程式碼,因為個人不太喜歡命令列(了無生趣),主要是不太會用命令列,哈哈,平常都是圖形化介面工具用的比較多,可這次就犯難了,gitlab 上使用了 sshKey, 我用 sour

自動scp然後ssh登入,執行遠端命令

#!/usr/bin/expect set password 123456 set host 191.168.4.249 set command "rmmod pcie_loader.ko &

SSH分發、檔案分發、批量執行命令

SSH祕鑰分發、檔案分發、批量執行命令 要求使用同一使用者lss,實現A機器從本地分發資料到B、C的過程不需要輸入密碼,且可以批量在B、C主機上執行命令 IP 角色 使用者 192.1

Python免祕ssh遠端登入執行命令and本地執行shell命令

python遠端執行 python paramiko 模組的應用 環境 # yum install python-dev # yum install python-devel # pi

git之使用ssh-add新增

github的ssh配置如下: 一 、 設定git的user name和email: gitconfig−−globaluser.name"xuhaiyan" git config –global

linux ssh scp expect/ 自動登入並自動執行指令碼

不想使用金鑰,那就使用expect,自動填充密碼,現在自動登入,以及簡單自動化操作。 ssh自動登入 #!/usr/bin/expect -f set ip 192.168.1.10 set password 881234 set timeout 10 spawn