在gitlab,github上面拷貝代碼時(shí),通常用到了git clone ssh://XXX命令。其中ssh指secure shell(一種安全的網(wǎng)絡(luò)協(xié)議),git使用這種協(xié)議進(jìn)行遠(yuǎn)程加密登錄。
配置SSH
git使用SSH配置, 初始需要以下三個(gè)步驟
- 使用秘鑰生成工具
生成rsa秘鑰和公鑰 - 將rsa
公鑰添加到代碼托管平臺(tái) - 將rsa
秘鑰添加到ssh-agent中,為ssh client指定使用的秘鑰文件
- 使用
ssh-keygen命令來(lái)創(chuàng)建密鑰對(duì), 默認(rèn)保存路徑為~/.ssh/下, 一般id_rsa為私鑰,id_rsa.pub為公鑰。 - 使用
cat ~/.ssh/id_rsa.pub命令獲取公鑰,然后拷貝到托管網(wǎng)頁(yè)上, 一般是setting(設(shè)置)——>SSH Keys里面添加 - 對(duì)于在默認(rèn)路徑
~/.ssh/下生成的id_rsa密鑰對(duì),任何ssh client是可以直接讀取到,不需要額外配置
驗(yàn)證原理
SSH登錄安全性由非對(duì)稱加密保證,產(chǎn)生密鑰時(shí),一次產(chǎn)生兩個(gè)密鑰,一個(gè)公鑰,一個(gè)私鑰,在git中一般命名為id_rsa.pub, id_rsa。
那么如何使用生成的一個(gè)私鑰一個(gè)公鑰進(jìn)行驗(yàn)證呢?
- 本地生成一個(gè)密鑰對(duì),其中公鑰放到遠(yuǎn)程主機(jī),私鑰保存在本地
- 當(dāng)本地主機(jī)需要登錄遠(yuǎn)程主機(jī)時(shí),本地主機(jī)向遠(yuǎn)程主機(jī)發(fā)送一個(gè)
登錄請(qǐng)求,遠(yuǎn)程收到消息后,返回一個(gè)隨機(jī)生成的字符串,本地拿到該字符串,用存放在本地的私鑰進(jìn)行加密,再次發(fā)送到遠(yuǎn)程,遠(yuǎn)程用之前存放在遠(yuǎn)程的公鑰對(duì)本地發(fā)送過(guò)來(lái)加密過(guò)的字符串進(jìn)行解密,如果解密后與源字符串等同,則認(rèn)證成功。

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