国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Git認(rèn)證方式https和ssh的原理及比較

常見的代碼托管平臺GitHub、GitLab和BitBucket等,基本都會使用Git作為版本控制工具。平臺一般都提供兩種認(rèn)證方式https和ssh。了解該過程能夠更加自由的配置和使用,本文就來簡單聊一下這兩種認(rèn)證方式。

1.HTTPS與SSH

Git可以使用四種協(xié)議來傳輸數(shù)據(jù):本地協(xié)議(Local),git 協(xié)議,HTTPs 協(xié)議和SSH(Secure Shell)協(xié)議。對于多人遠(yuǎn)程協(xié)作,多用后兩者。

超文本傳輸協(xié)議http運行于網(wǎng)絡(luò)應(yīng)用層,是應(yīng)用層通信協(xié)議,使用下層的TCP協(xié)議進(jìn)行傳輸控制。

位于不同網(wǎng)絡(luò)終端的兩個應(yīng)用進(jìn)程之間可以通過http進(jìn)行通信,典型的應(yīng)用場景是瀏覽器和網(wǎng)站服務(wù)器,是一種C/S Model.

Https可以看做是http+ssl,ssl協(xié)議位于網(wǎng)絡(luò)應(yīng)用層和傳輸層之間,主要為應(yīng)用層提供加密服務(wù),https即為http協(xié)議使用ssl協(xié)議加密傳輸數(shù)據(jù)。

SSH為Secure Shell 的縮寫,即安全外殼協(xié)議。SSH 為建立在應(yīng)用層基礎(chǔ)上的安全協(xié)議。SSH 是目前較可靠,專為遠(yuǎn)程登錄會話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。

常說的ssh client如OpenSSH等只是SSH協(xié)議的一種程序?qū)崿F(xiàn),也就是ssh client程序支持SSH協(xié)議相關(guān)標(biāo)準(zhǔn)。

對于code repo的管理,顯然是需要加密進(jìn)行身份認(rèn)證的。

2.https和ssh原理

2.1 https原理

https方式clone一個repo或者pull和push到遠(yuǎn)端只需要根據(jù)提示提供自己的username和password即可。

這種方式比價的簡便和便于理解,使用自己在平臺的賬號和密碼進(jìn)行授權(quán)并進(jìn)行repo相關(guān)操作。

賬號密碼以及后續(xù)repo相關(guān)的傳輸均使用ssl加密。ssl加密解密的過程完全透明。

ssl認(rèn)證需要首先驗證服務(wù)器有有效的證書,對服務(wù)器的認(rèn)證是通過非對稱秘鑰的方式,該非對稱秘鑰由第三方公證機構(gòu)CA提供。

然后通過該非對稱密鑰對和服務(wù)器私密的協(xié)商后續(xù)數(shù)據(jù)傳輸使用的加密算法以及用于生成對稱秘鑰的一些隨機數(shù)據(jù)。

ssl握手協(xié)議結(jié)束后會產(chǎn)生只有client和server知道的對稱加密秘鑰,而該秘鑰也用后續(xù)所有傳輸數(shù)據(jù)的加密。詳細(xì)過程可以參考相關(guān)資料。

即兩步:

  1. username&pwd驗證對repo的操作權(quán)限 ;
  2. ssl對傳輸數(shù)據(jù)進(jìn)行加密(server身份驗證和加密解密過程完全透明);

實際操作只需要用到第一步,window和一些第三方git client可以支持永久保存自己的賬號和密碼。

Windows查看保存的賬號信息:

Win鍵 ->搜索credential ->管理Windows 憑據(jù) -> 普通憑據(jù)(or 控制面板 -> 用戶賬戶 -> 管理Windows 憑據(jù) -> 普通憑據(jù))

 2.2 ssh原理

https實際操作有一步,但是操作權(quán)限驗證和傳輸加密是分開的。

ssh不僅可以壓縮和加密傳輸數(shù)據(jù)還可以進(jìn)行身份授權(quán)驗證。

ssh方式使用非對稱加密所需的key-pairs完成身份驗證和傳輸數(shù)據(jù)加密,git client和server分別需要持有非對稱秘鑰對中的一個。

出于安全和保密考慮,通常由用戶使用秘鑰生成工具生成RSA密鑰對,并將其中的public key添加到服務(wù)端,自己保留private key。

ssh client使用private key向服務(wù)端證明自己的身份。

ssh 看起來似乎更加的安全方便,因為它將身份驗證和賬戶密碼分離開來,可以單獨使用秘鑰來進(jìn)行代碼庫的操作。

但是使用ssh的初始步驟可能有點麻煩,這個后面介紹。

此外,private key由文件保存,存在丟失的風(fēng)險,對private key進(jìn)行密碼保護,需要每次使用的時候都輸入密碼。

不管是git bash還是其他的git client都可以直接使用https,但是使用ssh需要單獨的ssh client。

The only requirement is to have the OpenSSH client installed on your system. This comes pre-installed on GNU/Linux and macOS, but not on Windows

并自己生成和管理秘鑰對,而且對于非默認(rèn)路徑下rsa密鑰對,需要額外相對復(fù)雜的處理。 

2.3 比較

https方式使用賬號和密碼授權(quán),簡單易用,便于進(jìn)行權(quán)限細(xì)分管理,而且防火墻一般會打開 http 和https協(xié)議的端口號80 和 443??梢赃M(jìn)行匿名訪問,對于開源項目,其他人即使沒有任何權(quán)限也可以方便進(jìn)行除提交之外的克隆和讀取操作。但是可能需要每個項目成員都有一個代碼托管平臺的賬號,而且缺乏憑證管理的話,可能要頻繁的進(jìn)行賬號密碼輸入。

ssh方式單獨使用非對稱的秘鑰進(jìn)行認(rèn)證和加密傳輸,和賬號密碼分離開來,不需要賬號也可以訪問repo。生成和管理秘鑰有點繁瑣,需要管理員添加成員的public key。不能進(jìn)行匿名訪問,ssh不利于對權(quán)限進(jìn)行細(xì)分,用戶必須具有通過SSH協(xié)議訪問你主機的權(quán)限,才能進(jìn)行下一步操作,比較適合內(nèi)部項目。

總的來說,https方便快捷,ssh的使用更加靈活。

3. 配置SSH

如果git使用ssh協(xié)議,初始化設(shè)置需要三步:

  1. 使用秘鑰生成工具(ssh-keygen、puttygen等)生成rsa秘鑰;
  2. 將rsa公鑰添加到代碼托管平臺;
  3. 將rsa秘鑰添加到ssh-agent中,為ssh client指定使用的秘鑰文件;

操作無誤后,然后便可以使用ssh方式操作repo。

對于在默認(rèn)路徑~/.ssh/id_rsa下生成的id_rsa密鑰對,任何ssh client是可以直接讀取到。可以忽略上面的最后一步以及下面將要介紹的內(nèi)容。

對于第二步,可以參照一下具體網(wǎng)站的操作,對于github和gitlab,可以在settings中ssh key相關(guān)的界面添加保存公鑰。

下面主要介紹一下第一步和最后一步自定義秘鑰對生成路徑的情況。

3.1 生成SSH秘鑰

生成ssh key pairs的工具有很多:

  • Git Bash提供的仿真環(huán)境,可以使用部分linux命令;
  • Git GUI自帶的生成方式;
  • PuttyGen 提供可視化的生成過程;
  • Cygwin提供的眾多工具;

等等。git bash生成方式較為靈活,下面以這個為例來介紹。

Git Bash下直接使用ssh-keygen命令需要指定秘鑰生成路徑和保護密碼。下面是一種新的更為安全的ssh秘鑰生成方式:

ssh-keygen -o -t rsa -b 4096 -C "your_email@163.com" -f ~/.ssh/new_dir/id_rsa

 生成過程中設(shè)置的passphrase主要是為了防止別人盜用你的秘鑰文件,如果設(shè)置有保護密碼,首次添加id_rsa會要求輸入保護密碼用以證明秘鑰是你的。

查看rsa秘鑰fingerprints信息(standard SHA256 Key output):

ssh-keygen -lf ~/.ssh/new_dir/id_rsa.pub(output) 4096 SHA256:myo......xac your_email@163.com (RSA)

 Old MD5 Format:

$ ssh-keygen -E md5 -lf ~/.ssh/new_dir/id_rsa.pub(output)  4096 MD5:ba:......fb:8e your_email@163.com (RSA)

 3.2 Git Bash

官網(wǎng)上下載的git安裝完成后會有g(shù)it bash和git gui可以使用,分別對應(yīng)于git client命令行和可視化圖形界面。

git bash環(huán)境可以支持部分linux命令,其中ssh client默認(rèn)使用的是OpenSSH.

$ ssh -VOpenSSH_7.7p1, OpenSSL 1.0.2o  27 Mar 2018

ssh client運行時會默認(rèn)使用~/.ssh/id_rsa,假設(shè)該秘鑰存在的情況下。對于非默認(rèn)路徑下的秘鑰,需要為ssh client指定。

OpenSSH

OpenSSH的參數(shù)來源主要是通過ssh_config(OpenSSH SSH client configuration files)
對于Openssh配置方式以及優(yōu)先級低到高依次為:

  1. etc/ssh/ssh_config ,# (system-wide file)
  2. ~/.ssh/config,     # (user-specific file)
  3. 命令行配置           # (command line options)

ssh_config文件的基本結(jié)構(gòu)是:keyword arguments(參數(shù)名 參數(shù)值),#為行注釋符,具體細(xì)節(jié)可以參考 man 5 ssh_config。

實際可以使用其中的任何一個設(shè)定ssh client,下面分別介紹這三種方式,這里我們只關(guān)注非默認(rèn)路徑下秘鑰文件的指定操作。

a). ssh_config

在Windows中安裝完git for windows之后,Git安裝目錄/etc/ssh/ssh_config找到ssh_config,該文件的大部分配置默認(rèn)均被注釋掉了。

通過添加下面的內(nèi)容進(jìn)行自定義秘鑰的指定:

Host github.com
Preferredauthentications publickey IdentityFile
~/.ssh/github/id_rsaHost gitlab.com
Preferredauthentications publickey
IdentityFile ~/.ssh/gitlab/id_rsa

 b). config

~/.ssh/目錄下是沒有config文件的,需要自己添加,內(nèi)容和上面的ssh_config一樣。

 c). command line

eval $(ssh-agent -s)ssh-add ~/.ssh/other_id_rsa

 直接運行ssh-add會添加默認(rèn)的~/.ssh/id_rsa,可以使用指令ssh-add -l查看命令行添加的id_rsa.

命令行相對于另外兩種配置方式,每次打開git bash都需要進(jìn)行重新添加,比較麻煩。

用上面任何一種方式添加指定的秘鑰,測試添加成功與否可以使用下面的命令:

$ ssh -T git@github.comor$ ssh -T git@gitlab.com

認(rèn)證成功和失敗分別返回:

Welcome to GitLab, @your username!git@gitlab.com: Permission denied (publickey).

相比較與命令行,使用ssh config的方式更加方便,而且配置文件也可以被git gui使用。

注意:

  • window平臺上~表示的是%userprofile% (e.g. echo %userprofile% ==> C:\Users\username )
  • 上面通過在~/.ssh/config中添加額外的密鑰對是針對ssh Client為OpenSSH,每個host下面可以添加多個認(rèn)證的密鑰對,使用SSH認(rèn)證過程中會依次驗證,直到找到正確的秘鑰。
  • SSH密鑰對設(shè)置的保護密碼,會在使用秘鑰的時候要求輸入,主要為了證明秘鑰的確是你的。

 3.3 SourceTree

SourceTree是一個較為流行g(shù)it client。會自動保存https方式認(rèn)證的賬戶名和密碼,可在tools -> options -> authentication中管理。

在sourcetree中使用ssh方式只需要指定使用的ssh client,然后添加對應(yīng)的ssh密鑰即可。

方式一:tools -> options -> general -> ssh client configuration;

方式二:tools -> add ssh key;

第一種方法可以批量添加ssh key,之間使用分號;分開。

ssh client configuration中可以看到已經(jīng)添加的所有的ssh key,同時這里可以指定特定的ssh client(PuTTY/Plink or OpenSSH )。

由于ssh-agent會在sourcetree啟動的時候開啟并添加指定的ssh key,因此方式一添加的ssh key,可能要重啟sourcetree才能生效。

配置完成后,使用ssh方式clone一個庫的時候,sourcetree能夠自動識別repository type說明配置是正確的。

4.其他:

1. Git全局設(shè)置

首次使用git需要配置一下自己的用戶名和郵箱,作為每次提交者的身份,會被記錄在提交日志中。

git config --global user.name "your username"git config --global user.email "your email"

這里設(shè)置的全局信息存放在~/.gitconfig中,可以使用git config -l 查看所有全局設(shè)置的信息。

2. https方式緩存賬號和密碼

除了操作系統(tǒng)和第三方工具提供的憑證保存方案,可以參考一下github介紹的一種方式:Caching your GitHub password in Git。

還可以通過為git指定憑據(jù)管理器的方式緩存憑證:

新建文件~/.git-credentials,內(nèi)容為:https://{username}:{passwd}@github.com

為~/.gitconfig添加憑據(jù)地址:

[credential]
  helper = store

可以通過執(zhí)行命令$ git config --global credential.helper store來完成。建議使用系統(tǒng)憑據(jù)管理器,不推薦這種方式。

3.knows_hosts文件

文件~/.ssh/known_hosts中存放的是所有已經(jīng)安全連接過的服務(wù)器(hosts)的公鑰。

Warning: Permanently added 'gitlab.com,35.231.145.151' (ECDSA) to the list of known hosts.

參考:

https://docs.gitlab.com/ee/ssh/

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一目了然:git命令三種方式實現(xiàn)Gitlab和Github同時登錄
ssh遠(yuǎn)程登錄
Openssh 網(wǎng)絡(luò)安全通信
【轉(zhuǎn)載】openSSH Server 手動安裝和配置
SSH基本概述
ssh重裝ubuntu
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服