1. 程式人生 > >SSH協議、遠端登入

SSH協議、遠端登入

1.SSH協議簡介

SSH是securityShell的縮寫,他也屬於安全傳輸協議的一種。但是與ssl不同的是,它一般是用來做遠端登入的。並且他也沒有用到ssl協議裡面用到的數字證書,但是它和ssl相同點就是兩者都使用了非對稱加密並且兩個協議都是位於傳輸層和應用層之間的協議。

2.兩種遠端登陸的方式

1.使用ssh金鑰認證

第一種方式就是不用通過密碼登入,但是需要遠端登入端生成一個ssh金鑰。比如我使用的xshell連線工具。我們需要首先通過xshell工具生成使用者金鑰。流程是點選工具,點選第四個出現下圖

點選新建使用者金鑰成嚮導  

點選生成,繼續點選下一步,使用者名稱和密碼可填寫可不填,主要看你對安全的要求。

這樣就生成了遠端登入端的金鑰。然後回到主機這邊。

我使用的是阿里雲伺服器,就按照這個舉例子了。首先進入到/etc/ssh 目錄,下面有一個ssh_config檔案,編輯這個檔案

找到 RSAAuthentication,把後面改成yes。有的也可能是預設開啟的。大家注意到下面有一個password開頭的,這個就是是否允許密碼登入,就是下面介紹的。然後裡面可以通過AuthorizedKeysFile 這個選項來配置已經授權的金鑰的檔案位置,這個可以自己配置。我的配置是.ssh/authorized_keys,然後編輯authorized_keys這個檔案(沒有的話通過vi命令建立檔案),把上面生成的金鑰複製到這個檔案裡面。然後就是配置相關檔案的許可權,ssh對檔案的許可權管理很嚴格。上面的authorized_keys的許可權必須是600(所有者具有讀寫許可權)。.ssh檔案的許可權是700(所有者具有執行好和讀寫許可權)。相關的許可權配配置之後,在使用service sshd restart來重啟ssh服務。這樣當遠端登入段登陸的時候,主機就會去authorized_keys檔案裡面檢視是否有對應的金鑰,有的話會生成隨機數R,並用Client的公鑰對該隨機數進行加密,然後將加密後資訊傳送給Client,Client端通過私鑰進行解密得到隨機數R,然後對隨機數R和本次會話的SessionKey利用MD5生成摘要Digest1,傳送給Server端。Server端會也會對R和SessionKey利用同樣摘要演算法生成Digest2,最後比較Digest1和Digest2是否相同,完成認證過程

2.使用使用者密碼登入

這種登入方式的主要的工作是在遠端主機上面完成的。在遠端主機上執行 

ssh-keygen -t rsa -P "***" -f  root/.ssgh/id_rsa  生成金鑰

-t代表生成金鑰的種類

-p表示是否啟用密碼驗證

-f表示生成的私鑰的檔案的位置,生成的公鑰會自動在私鑰的檔案後面加上_pub。

生成之後客戶端再連線主機的時候,主機會把公鑰傳送給客戶端,然後客戶端可能會收到這樣一條提示,已經把當前主機加入到known_host裡面,這個檔案會記錄你訪問的所有的主機的公鑰。作用就是客戶端對主機進行安全驗證,當下次連線相同的主機的時候,客戶端會驗證主機的公鑰是否發生變化,如果發生變化,就會對使用者提出警告。檔案的位置一般在~/.ssh/known_hosts。然後使用者名稱輸入密碼和賬號,客戶端會把這部分資訊通過主機的公鑰進行加密傳送給主機,主機用私鑰進行解密並且驗證使用者名稱和密碼從而確定遠端主機是否可以登入。

 

 

 

最後非常感謝https://www.jianshu.com/p/33461b619d53  這篇文章的作者。部分內容摘抄自這篇文章。