我從GitHub賬戶克隆了一個Git存儲庫到個人PC。 html
我想同時使用PC和筆記本電腦,但要使用一個GitHub賬戶。 git
當我嘗試使用PC推送或從GitHub拉出時,它須要用戶名和密碼,但在使用筆記本電腦時則不須要! github
我不想每次與Origin交互時都輸入用戶名和密碼。 我在這裏想念什麼? 緩存
我遇到了一樣的問題,發現的最簡單的解決方案是使用SSH URL而不是HTTPS: 安全
ssh://git@github.com/username/repo.git
而不是這樣: bash
https://github.com/username/repo.git
如今,您能夠僅使用SSH密鑰而不是username
和password
。 服務器
除了更改成SSH以外,若是您不介意以明文形式輸入密碼,也能夠繼續使用HTTPS。 將其放在您的~/.netrc
,它不會詢問您的用戶名/密碼(至少在Linux和Mac上如此): 網絡
machine github.com login <user> password <password>
添加 (請參閱VonC的第二條註釋):在Windows上,文件名爲%HOME%\\_netrc
。 ssh
若是您想加密,還請閱讀VonC的第一條評論。 socket
若是您擁有Git 1.7.10或更高版本,則可使用另外一個添加項 (請參閱user137717的註釋)。
若是您要使用HTTPS克隆GitHub存儲庫,則可使用憑據幫助程序告訴Git每次與GitHub對話時都記住您的GitHub用戶名和密碼。
這也適用於Linux,Mac和Windows。
HTTPS更新:
GitHub爲Windows啓動了一個新程序,該程序能夠在您使用HTTPS時存儲您的憑據:
使用方法:
從這裏下載程序
一旦運行該程序,它將編輯您的.gitconfig
文件。 若是其中有多個,請從新檢查它是否編輯了正確的.gitconfig
。 若是沒有正確編輯,請將如下內容添加到您的.gitconfig
[credential] helper = !'C:\\\\Path\\\\To\\\\Your\\\\Downloaded\\\\File\\\\git-credential-winstore.exe'
注意[credential]
以後的換行符。 它是必需的。
打開命令行客戶端,而後嘗試git push origin master
。 若是它要求您輸入密碼,請輸入密碼,而後您就能夠經過了。 密碼已保存!
若是您使用的是SSH,而且您的私鑰已使用密碼進行了加密,那麼當您使用Git進行 push
, pull
和fetch
進行網絡操做時 , 仍然會提示您輸入私鑰的密碼/密碼 。
若是您不想每次都輸入密碼,可使用ssh-agent
在每一個終端會話中存儲一次私鑰密碼憑證,正如我在「 沒法打開與身份驗證代理的鏈接」的回答中所解釋的:
$ eval `ssh-agent -s` $ ssh-add
在Windows msysgit Bash中,您須要評估ssh-agent
的輸出,可是我不肯定是否須要在其餘開發環境和操做系統中執行相同的操做。
ssh-add
在您的home .ssh
文件夾中查找.ssh
id_rsa
,這是默認名稱,可是您能夠將文件路徑傳遞給具備不一樣名稱的密鑰。
完成終端會話後,可使用kill標誌-k
關閉ssh-agent
:
$ ssh-agent -k
-k終止當前代理(由SSH_AGENT_PID環境變量提供)。
此外,它能夠採用可選的超時參數,以下所示:
$ ssh-add -t <timeout>
其中<timeout>
的格式爲<n>h
表示<n>
小時, <n>m
表示<n>
分鐘,依此類推。
根據ssh-agent
手冊 :
-t life爲添加到代理中的身份的最大生存期設置默認值。 生存期能夠以秒爲單位或以sshd_config(5)中指定的時間格式指定。 使用ssh-add(1)爲身份指定的生存期將覆蓋此值。 若是沒有此選項,則默認的最大生存期是永遠的。
Cygwin用戶應注意在Cygwin中使用ssh-agent的潛在安全風險 :
人們應該意識到Cygwin 1下ssh-agent的潛在危險,儘管在本地netstat和遠程端口下,彷佛/ tmp / ssh-foo中指定的端口彷佛沒法被任何人訪問嗎?
[1]: http://www.cygwin.com/ml/cygwin/2001-01/msg00063.html
並在引用的連接處 :
可是,請注意Cygwin的Unix域套接字基本上是不安全的 ,因此我強烈反對在Cygwin下的ssh-agent的用法。
當您在Cygwin下運行ssh-agent時,它將在
/tmp/ssh-$USERNAME/
目錄中建立AF_UNIX套接字。 在Cygwin下,AF_UNIX套接字經過AF_INET套接字進行仿真。 若是您經過記事本查看/tmp/ssh-$USERNAME/agent-socket-*
文件,則能夠輕鬆看到。 您會看到相似!<socket >2080而後運行
netstat -a
並感到驚訝! 您有一些程序正在監聽端口2080。它是ssh-agent。 當ssh從服務器收到RSA質詢時,它指的是/tmp/ssh-$USERNAME/agent-socket-*
(在Cygwin下,在本例中,這意味着它將打開與localhost:2080
鏈接)並詢問ssh -agent使用它具備的私鑰來處理RSA質詢,而後將從ssh-agent收到的響應簡單地傳遞到服務器。在Unix下,這種狀況能夠正常工做,由於在程序嘗試訪問AF_UNIX套接字時,Unix內核會檢查權限。 可是,對於AF_INET套接字,鏈接是匿名的(請參閱「不安全」)。 想象一下,您正在運行Cygwin ssh代理。 惡意黑客可能會在您的包裝箱中打開端口,找到ssh-agent使用的開放端口,打開與您的SSH服務器的鏈接,接收來自RSA服務器的RSA挑戰,並經過他/她找到的開放端口將其發送到您的ssh-agent,並接收RSA響應,將其發送到SSH服務器,瞧,他/她已成功登陸到您的服務器。
資料來源: Setting Git
如下命令會將密碼保存在內存中一段時間(對於Git 1.7.10或更高版本)。
$ git config --global credential.helper cache # Set git to use the credential memory cache $ git config --global credential.helper 'cache --timeout=3600' # Set the cache to timeout after one hour (setting is in seconds)