SSH全稱(Secure SHell)是一種以安全性聞名的應用層網絡通信協議,用於計算機間的安全通信,是目前比較成熟的遠程登陸解決方案。
它提供兩種方法登陸:
1.密碼登陸
2.公鑰登陸
密碼登陸
1.客戶端填寫用戶名密碼發起遠程登陸
2.遠端服務器收到登陸請求后,會將本地的一個公鑰發送給客戶端
3.客戶端收到公鑰后,將自己的登陸信息用遠端服務器的公鑰加密,並將加密后的結果發送給遠端服務器。
4.遠端服務器收到登陸密文后,用本地私鑰解密,拿到登陸信息到數據庫比較。登陸信息無誤時,顯示登陸成功。有誤時就報錯。
5.登陸成功后,客戶端將會將遠端服務器的公鑰保存到本地,等下次再登陸時,客戶端檢測到收到的公鑰已經在本地存在(通常保存的目錄:$HOME/.ssh/known_hosts),就不會報警告了
提示:
在密碼登陸進行到第2步時,客戶端收到了服務器的公鑰,但是不確定這個公鑰到底是不是要訪問的目標服務器(也可能時中間攻擊者,發送過來的假公鑰)。此時會有提示
# ssh user@host
The authenticity of host 'host (18.18.229.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
如果確定這個公鑰就是目標服務器發過來的公鑰,就點擊yes,完成登陸。
公鑰登陸
公鑰登陸相對密碼登陸可以避免中間攻擊,同時也簡單很多
1.客戶端在本地生成一對公私鑰
2.將客戶端本地生成的公鑰手動添加到遠端服務器上
3.客戶端發起登陸請求到遠端服務器
4.遠端服務器收到請求后,會本地生成一串隨機字符,並將該隨機字符串發送給客戶端
5.客戶端收到遠端服務器的隨機字符串后,用本地私鑰加密,並將密文傳給遠端服務器
6.遠端服務器將收到的密文用保存的客戶端公鑰解密,並將解密結果與原隨機字符串對比,若一致的話證明客戶端可信,允許登陸。
提示:
客戶端生成公私鑰的步驟如下:
第一步:在本地機器上使用ssh-keygen產生公鑰私鑰對
執行命令:
ssh-keygen -t rsa -C "150321****@163.com"
-t :表示加密類型
-C :表示密鑰標示字符串
第二步:將公鑰id_rsa.pub添加到GITLab中的SSHKEY上
執行命令:
192:~ zhoufei$ cd ~/.ssh 192:.ssh zhoufei$ cat id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBQYZidTBczPtJ22xNJwl7Pq+yaZnualVS8juad3Oq+w6v5kgin9sW+xs7w9qrGmWHTkkOIPvckmqY7qobazI32YzI9IKFE2yGm51H1pXM4t9iEB0OCHdy1s1D2gB/bNI2ZJPhDjLOfbGO1Mj9B85n8WR0dy8eYSRBhUneiKor8ENnCvP1Sw4XOsEg6aDCMNRCzDY94Ar4ps41hcg34dNS2eMPsXMrTrz8fCv+IbBltUMDVdcoEFwb8VyYZ8ZspbY6zzRc1nZ5flhfGoB6Zjmmz2tSGCnNS16GdTpoGJd+UaiqrWNuocYWorPocbeMiIi+duZfvYVRNDCmaN0zUlwl****977961@qq.com
若添加后,無法正常拉取和提交,就本地查詢是否有客戶端身份信息
abcdeMacBook-Pro:.ssh zhoufei$ ssh-add -L
The agent has no identities.
解決方法:
abcdeMacBook-Pro:.ssh zhoufei$ ssh-add Enter passphrase for /Users/zhoufei/.ssh/id_rsa: Identity added: /Users/zhoufei/.ssh/id_rsa (/Users/zhoufei/.ssh/id_rsa)