參考大佬的文章:https://blog.csdn.net/li528405176/article/details/82810342 https://www.cnblogs.com/Bravewtz/p/11560312.html
SSH學習:
Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在應用層基礎上的安全網絡協議。它是專為遠程登錄會話(甚至可以用Windows遠程登錄Linux服務器進行文件互傳)和其他網絡服務提供安全性的協議,可有效彌補網絡中的漏洞。通過SSH,可以把所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。目前已經成為Linux系統的標准配置。
SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。本文主要介紹OpenSSH免費開源實現在Ubuntu中的應用,如果要在Windows中使用SSH,需要使用另一個軟件PuTTY。
SSH的安全機制
SSH之所以能夠保證安全,原因在於它采用了非對稱加密技術(RSA)加密了所有傳輸的數據。
傳統的網絡服務程序,如FTP、Pop和Telnet其本質上都是不安全的;因為它們在網絡上用明文傳送數據、用戶帳號和用戶口令,很容易受到中間人(man-in-the-middle)攻擊方式的攻擊。就是存在另一個人或者一台機器冒充真正的服務器接收用戶傳給服務器的數據,然后再冒充用戶把數據傳給真正的服務器。
但並不是說SSH就是絕對安全的,因為它本身提供兩種級別的驗證方法:
第一種級別(基於口令的安全驗證):只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到“中間人攻擊”這種方式的攻擊。
第二種級別(基於密鑰的安全驗證):你必須為自己創建一對密鑰,並把公鑰放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密鑰進行安全驗證。服務器收到請求之后,先在該服務器上你的主目錄下尋找你的公鑰,然后把它和你發送過來的公鑰進行比較。(這里當時想,公鑰不是誰都知道,不就可以偽造,你接着往下看)如果兩個密鑰一致,服務器就用公鑰加密“質詢”(challenge)並把它發送給客戶端軟件。客戶端軟件收到“質詢”之后就可以用你的私鑰在本地解密再把它發送給服務器完成登錄。(你偽造了公鑰發起請求,你沒有私鑰你也解不開啊。。還咋登錄?)與第一種級別相比,第二種級別不僅加密所有傳輸的數據,也不需要在網絡上傳送口令,因此安全性更高,可以有效防止中間人攻擊。
SSH兩種級別的遠程登錄
一、口令登錄
口令登錄非常簡單,只需要一條命令,命令格式為: ssh 客戶端用戶名@服務器ip地址 eg:
ssh ldz@192.168.0.1
如果需要調用圖形界面程序可以使用 -X 選項
ssh -X ldz@192.168.0.1
如果客戶機的用戶名和服務器的用戶名相同,登錄時可以省略用戶名。
ssh 192.168.0.1
還要說明的是,SSH服務的默認端口是22,也就是說,如果你不設置端口的話登錄請求會自動送到遠程主機的22端口。我們可以使用 -p 選項來修改端口號,比如連接到服務器的1234端口:
ssh -p 1234 ldz@192.168.0.1
客戶機必須要知道服務器的ip地址。可以在服務器端電腦上利用 ifconfig 命令查看該機的ip地址
如果是第一次登錄遠程主機,系統會給出下面提示:
意思是,該遠程主機的真實性無法確定,其公鑰指紋為 SHA256:FFobshqrGOachj7Xp4LsJ9+xkNBlyyOe8ZIPl7K+qQI,確定想要繼續連接嗎?
輸入yes即可。這時系統會提示遠程主機被添加到已知主機列表。
然后會要求我們輸入遠程主機的密碼,輸入的密碼正確就可以成功登錄了。命令提示符會修改為遠程主機的提示符,現在開始,終端中輸入的命令都將在服務器中執行。
我們可以通過 Ctrl+D 或者 exit 命令退出遠程登錄。
二、公鑰登錄
每次登錄遠程主機都需要輸入密碼是很不方便的,如果想要省去這一步驟,可以利用密鑰對進行連接,還可以提高安全性。
1、在本機生成密鑰對
使用ssh-keygen命令生成密鑰對:
ssh-keygen -t rsa #-t表示類型選項,這里采用rsa加密算法
然后根據提示一步步的按enter鍵即可(其中有一個提示是要求設置私鑰口令passphrase,不設置則為空,這里看心情吧,如果不放心私鑰的安全可以設置一下),執行結束以后會在 /home/當前用戶 目錄下生成一個 .ssh 文件夾,其中包含私鑰文件 id_rsa 和公鑰文件 id_rsa.pub。
2、將公鑰復制到遠程主機中
使用ssh-copy-id命令將公鑰復制到遠程主機。ssh-copy-id會將公鑰寫到遠程主機的 ~/ .ssh/authorized_key 文件中
ssh-copy-id ldz@192.168.0.1
經過以上兩個步驟,以后再登錄這個遠程主機就不用再輸入密碼了。
cheers~
SSH的高級應用
使用遠程主機不中斷的跑程序
當我們利用ssh在遠程主機上跑程序的時候,只要關閉了終端就會中斷ssh連接,然后遠程主機上正在跑的程序或者服務就會自動停止運行。我們可以利用 nohup + 需要運行的程序 使運行的程序在切斷ssh連接的時候仍然能夠繼續在遠程主機中運行。nohup即no hang up(不掛起)。
除此之外還有很多遠程操作應用,包括 數據傳輸、端口操作(將不加密的網絡連接綁定到ssh端口實現間接加密) 等等,可以參考柚子皮大神的博客:https://blog.csdn.net/pipisorry/article/details/52269785
公鑰和私鑰
- 一個公鑰對應一個私鑰。
- 密鑰對中,讓大家都知道的是公鑰,不告訴大家,只有自己知道的,是私鑰。
- 如果用其中一個密鑰加密數據,則只有對應的那個密鑰才可以解密。
- 如果用其中一個密鑰可以進行解密數據,則該數據必然是對應的那個密鑰進行的加密。
基於公開密鑰的加密過程
- Bob將他的公開密鑰傳送給Alice。
- Alice用Bob的公開密鑰加密她的消息,然后傳送給Bob。
- Bob用他的私人密鑰解密Alice的消息。
基於公開密鑰的認證過程
- Alice用她的私人密鑰對文件加密,從而對文件簽名。
- Alice將簽名的文件傳送給Bob。
- Bob用Alice的公鑰解密文件,從而驗證簽名。