和Linux打交道,免不了用到ssh的相關知識。花大時間寫這篇諸公可在分分鐘透徹瞭解ssh原理和使用。不謝
一般遠程登錄都用ssh了,telnet什麼的傳輸的是明文因爲,ssh基於公鑰私鑰加密,而且還帶壓縮的。
OK,這裏說道公鑰私鑰的問題,順便再普及下:
首先知道一點:公鑰加密的用私鑰來解密,私鑰加密的用公鑰解密。
公鑰:顧名思義是公開給別人的,A公開給B,B就能通過A的公鑰來解密A的報文
密鑰:自己留着。作用是認證。鑑別用戶真僞。解釋下:如何知道這是A的報文,因爲只有A知道他自己的私鑰然後用私鑰加密數據,所以B如果解開了報文,就能肯定這報文就是A的不是別個僞裝的,不然也解不開
SSH最簡單的使用方法就是直接打命令 “ ssh 用戶名@主機地址 ” 主機地址一般就是IP地址啦,用戶名自然是主機上的用戶,避免不入門的同學上來把本機的用戶名替換上去了。當然這種方法方便,只是需要每次輸入密碼。
一般是通過公鑰登錄,現在幾乎所有用ssh遠程連接的軟件,比如XShell,SecureCRT都是用這種,第一次連接的時候就把自己的公鑰上傳到遠程主機。這裏我們不用這些軟件,自己打命令來看下這過程。反正都不復雜,而且現在的Linux都是默認裝了ssh服務的
首先生成公鑰,命令 ssh-keygen,如果想帶參數的話一般有這麼幾個 ,-t 指定加密類型(rsa 或者dsa)-f 密鑰 生成的位置 -b 密鑰長度,越長越安全。不過加密解密也會慢些,一般沒人設置這玩意。總之咱一般用直接打不帶參數的就中啊。後面有機會讓你填公鑰文件生成的路徑什麼的。
看到了吧,就是如此。那個passphrase什麼的我也說不清,就直接回車讓他爲空就好。這裏說下那個fingerprint,人稱“指紋”就是這樣。這玩意是根據私鑰文件生成的一串碼,作用是啥呢。就是SSH有個缺陷叫做中間人攻擊,上圖做解釋吧。這個指紋就是讓你第一次連的時候知道你連的是誰,你以爲你登陸那臺主機然後把登陸密碼發過去了結果人不是那臺主機。就這麼回事。到此,公鑰密鑰就都有了,路徑在哪看上圖。
OK,下一步,把這個公鑰給遠程主機。命令 ssh-copy-id user@host ,然後提示你輸密碼。成功了之後你再用命令 " ssh user@host " ,就可以直接登入而不用輸入密碼了。如果執行這條出現什麼” No identities found “的錯誤,就加上-i 參數,”-i 公鑰文件路徑“ 。遠程主機把公鑰存在主目錄下 .ssh文件夾下的anthorized_keys文件中。
最後很有用的scp命令,基於ssh,上步可以通過scp實現同樣功能。 如 scp user@host:~/.ssh/i_dsa.pub ~/.ssh 就可以實現把遠程主機的內容拷貝到本地,然後把pub導入到authorized_keys文件中,命令:cat 文件 >> authorized_keys,也可以從本地傳到遠程。
總算寫完了, 太累了,上面步驟經我親測。希望讀者有收穫。2015,着手寫技術博客。元旦快樂。