❶ 【linux】SSH 使用密碼/公鑰遠程登錄總結
本文是筆者查閱網上資料做的總結,關於SSH原理,什麼是對稱加密和非對稱加密,本文不過多介紹。這里介紹一下SHH的工作過程、配製方法,可能出現的問題及解決方法。
說明:本文中涉及的例子,SSH客戶端為:本地主機A,SSH伺服器為:伺服器B
SSH協議採用C-S(客戶端-伺服器端)架構進行雙方的身份驗證以及數據的加密。
伺服器端組件監聽指定的埠,負責安全連接的建立、對連接方的身份認證、以及為通過身份認證的用戶建立正確的環境。
客戶端負責發起最初的TCP握手、安全連接的建立、驗證伺服器的身份與之前記錄中的一致、並將自己的驗證信息提供給伺服器。
一個SSH會話的建立過程分為兩個階段。第一階段,雙方溝通並同意建立一個加密連接通道以供後續信息傳輸用。第二階段,對請求接入的用戶進行身份驗證以確定伺服器端是否要給該用戶開放訪問許可權。
當客戶端發起TCP連接時,伺服器端返回信息說明自己支持的協議版本,如果客戶端上支持的協議與之匹配,則連接繼續。伺服器會提供自己的公共主機密鑰(public host key)以讓客戶端確認自己訪問的是正確的機器。
然後,雙方採用一種Diffie-Hellman演算法共同為該會話建立密鑰。每一方的一部分私有數據,加上來自對方的一部分公共數據,通過這種演算法計算,能夠得出完全相同的密鑰用於本次會話。
整個會話的通訊內容都使用該密鑰進行加密。這個階段使用的公鑰/私鑰對與用戶驗證身份用的SSH密鑰是完全無關的。
經典Diffie-Hellman演算法的計算步驟如下:
這個共享密鑰的加密方式被稱為二進制數據包協議(binary packet protocol)。該過程能夠讓雙方平等的參與密鑰生成的過程,而不是由單方掌握。這種共享密鑰生成的過程是安全的,雙方沒有交換過任何未經加密的信息。
生成的密鑰是對稱式密鑰,一方用於加密信息的密鑰等同於另一方用於解密信息的密鑰,而任何第三方由於不持有該密鑰,是無法解密雙方傳遞的內容的。
會話加密通道建立後,SSH開始進入用戶認證階段。
下一步,伺服器驗證用戶身份以決定是否准許其訪問。驗證有不同的方式,選擇的驗證方式取決於伺服器的支持。
最簡單的驗證是密碼驗證:伺服器要求客戶端輸入密碼,客戶端輸入的密碼經過上述的通道加密傳輸給伺服器。
雖然密碼是加密過的,然而該方法仍然不被推薦,因為用戶經常為了省事而使用過於簡單的密碼,而這類密碼很容易就能夠被自動化腳本破解。
最流行的驗證方式是SSH密鑰對,這也是當前最推薦的方式。SSH密鑰對是非對稱密鑰,私鑰和公鑰分別用於不同的功能。
公鑰用於加密,而私鑰用於解密。公鑰可以隨意上傳、共享,因為公鑰的流通並不會危及到私鑰的保密性。
SSH密鑰對的驗證過程起始於上一部分加密通道建立之後,其具體執行步驟如下:
簡單來說,伺服器端用公鑰加密信息,客戶端用私鑰解密信息以證明自己持有私鑰。該過程同時使用了對稱加密和非對稱加密,兩種方式各有自己的功用。
命令如下:
用戶名:為要登錄的伺服器B中已存在的用戶賬戶名
IP地址:為伺服器B的IP地址
-p 埠號:用來指定埠號,默認為22
第一次登錄時,會提示如下提示:
大概意思是說,你正在訪問的主機不能驗證它的真實性,它的RSA key(當前訪問主機的公鑰)指紋是怎樣的,你確定要繼續連接嗎?
輸入yes繼續,會提示,已永久把當前訪問主機的RSA key添加到了已知主機文件(用戶目錄下,.ssh 文件夾中的knwon_hosts文件)中。之後再次 SSH 登錄就不再有該提示了。
接著,輸入登錄賬戶的密碼即可。
SSH 密碼登錄,需要伺服器開啟密碼驗證許可權,編輯伺服器SSH配置命令如下:
在 sshd_config 文件中,Protocol 2 下面 #PasswordAuthentication yes,將前面的#號去掉,保存退出。
公鑰登錄,即免密碼登錄。避免的每次登錄都要輸入的麻煩,也防止了中間人攻擊。是SSH遠程登錄最常用的登錄方式。
提示輸入密鑰對名稱,直接回車,使用默認名稱即可;
提示輸入密碼(使用私鑰時,要輸入密碼),直接回車,不使用密碼即可。
首先,登錄伺服器B,在進行下面的操作。
找到 #PubkeyAuthentication yes,刪除 #號,保存退出。
重啟 ssh 服務
也可指定驗證私鑰:
本地主機A,生成密鑰對後:
sudo vim /etc/selinux/config
❷ ssh 命令怎麼用
ssh命令用法:ssh+加要執行的命令,需在SSH 2客戶端上使用。
1、SSH客戶端版本查看。
有時需確認SSH客戶端及其相應的版本號。使用ssh -V命令可以得到版本號。注意,Linux一般自帶的是OpenSSH: 下面例子即表明該系統正在使用OpenSSH:
$ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003。
下面的例子表明該系統正在使用SSH2:
$ ssh -V ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu。
2、用SSH登錄到遠程主機。
當第一次使用ssh登錄遠程主機時,會出現沒有找到主機密鑰的提示信息。輸入"yes"後,系統會將遠程主機的密鑰加入到主目錄下.ssh/hostkeys下,這樣就可繼續操作。
3、調試SSH客戶端會話。
當ssh連接出現問題時,需通過查看調試信息來定位這些錯誤。使用v選項(注意:是小寫的v),即可查看調試信息。
4、用SSH退出符切換SSH會話。
遠程登陸到一台主機A,然後從A登陸到B,如希望在A上做操作,還得再開一個終端。
當使用ssh從本機登錄到遠程主機時,希望切換到本地做一些操作,然後再重新回到遠程主機。這時,不需中斷ssh連接,只需按照如下步驟操作即可:
當已經登錄到了遠程主機時,可能想要回到本地主機進行一些操作,然後又繼續回到遠程主機。
(1)登入遠程主機:
localhost$ ssh -l jsmith remotehost。
(2)已連接遠程主機:
remotehost$。
(3)要臨時回到本地主機,輸入退出符號:「~」與「Control-Z」組合。
當輸入「~」不會立即在屏幕上看到,按下<Control-Z>並且按回車之後一起顯示。如下,在遠程主機中以此輸入「~<Control-Z>」remotehost$ ~^Z [1]+ Stopped ssh -l jsmith remotehost localhost$。
(4)已經退回到本地主機,ssh遠程客戶端會話就在UNIX後台中運行,可向下面那樣查看它:
localhost$ jobs [1]+ Stopped ssh -l jsmith remotehost。
(5)可將後台運行的ssh會話進程切換到前台,重新回到遠程主機,而無需輸入密碼:localhost$ fg %1 ssh -l jsmith remotehost remotehost$。
5、用SSH退出字元會話,顯示信息。
要取得一些關於當前會話有用信息,可按以下方式完成。這只能在SSH 2客戶端上使用。
登錄到遠程伺服器:localhost$ ssh -l jsmith remotehost。
在遠程伺服器上,輸入ssh退出字元~並輸入s。會顯示出很多有關當前ssh連接的有用信息。
❸ ssh命令如何使用
ssh命令用於伺服器的遠程式控制制,一般情況下只要用「ssh IP地址」這樣的格式就可以了,例如:「ssh 192.168.10.10」,可參考:第9章 使用ssh服務管理遠程主機。
❹ SSH是什麼
是一種加密的網路傳輸協議。
可在不安全的網路中為網路服務提供安全的傳輸環境。SSH通過在網路中創建安全隧道來實現SSH客戶端與伺服器之間的連接。SSH最常見的用途是遠程登錄系悄螞喊統,人們通常利用SSH來傳輸命令行界面和遠程執行命令。
使用頻率最高的場合類Unix系統,但是Windows操作系統也能有限度地使用SSH。2015年,微軟宣布將在未來的操作系統中提供原生SSH協議支持,Windows10 1809 版本已提供可手動安裝的OpenSSH工具。
(4)ssh用法及命令擴展閱讀
ssh結構
SSH是由客戶端和服務端的軟體組成的,有兩個不兼容的版啟野本分別是:1.x和2.x。 用SSH 2.x的客戶程序是不能連接到SSH 1.x的服務程序上去的。OpenSSH 2.x同時支持SSH 1.x和2.x。
1、服務端是一個守護進程(daemon),他在後台運行並響應來自客戶端的連接請求。服務端一般是sshd進程,提供了對遠程連接的處理,一般包括公共密鑰認證、密鑰交換、對稱密鑰加密和非安全連接。
2、客戶端包含ssh程序以及像scp(遠程拷貝)、slogin(遠程登陸)、sftp(安全文件傳輸)等其他的應用程序。
3、他們的工作機制大致是本地的客戶端發送一個連接請求到遠程的服務端,服務端檢查申請的包和IP地址再發送密鑰給SSH的客戶端,本地再將密鑰發回給服務端,自此連接建立。SSH 1.x和SSH 2.x在連接協議上有一些差異。
SSH被設計成為工作於自己的基礎之上而不利用超級服物握務器(inetd),雖然可以通過inetd上的tcpd來運行SSH進程,但是這完全沒有必要。
啟動SSH伺服器後,sshd運行起來並在默認的22埠進行監聽(你可以用 # ps -waux | grep sshd 來查看sshd是否已經被正確的運行了)如果不是通過inetd啟動的SSH,那麼SSH就將一直等待連接請求。當請求到來的時候SSH守護進程會產生一個子進程,該子進程進行這次的連接處理 。
❺ SSH多種遠程登錄方法
使用 SSH 登錄伺服器有兩種方法: 用戶賬號登錄 和 使用公鑰登錄
直接使用以下命令
另外可以配置主機別名,這個和 使用公鑰登錄 差不多,區別是無需指定公鑰地址而已,這里就不重復了。
方法一:(在命令行中指定私鑰文件)
方法二:(使用 ssh-agent 代理)
方法三:(在 SSH 配置中指定私鑰文件)
使用跳板機登錄的方法在我看來不算其它登錄方式,它用到的還是本章的內容。
如果我把這三種方法都用了呢?即既使用了 -i ~/.ssh/id_rsa_server ,又使用了 ssh-agent ssh-add ~/.ssh/id_rsa_server ,還使用了域名主機配置 IdentityFile ~/.ssh/id_rsa 。
答案很簡單,SSH 會先使用 -i ~/.ssh/id_rsa_server ,如果登錄失敗,則使用 ssh-agent ssh-add ~/.ssh/id_rsa_server ,找不到合適的公鑰的話,再使用 IdentityFile ~/.ssh/id_rsa ,還是失敗的話則提示輸入密碼,如果允許賬號登錄的話,否則整個登錄失敗。
❻ ssh使用詳解
簡單來說,ssh是一種 網路協議 ,用於計算機之間的加密登錄。如果一個用戶從本地計算機,使用ssh協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
SSH 之所以安全是採用了公鑰加密的方式,通過客戶自己簽發公鑰加密用戶密碼,再通過主機持有的私鑰解密;不像 HTTPS 協議存在證書管理中心CA用於驗證公鑰的合法性,因此,存在被中間人劫持的風險,即劫持登錄請求發送篡改的公鑰來截獲用戶登錄密碼,俗稱」中間人攻擊「;
不過 SSH 存在一套自有的驗證方式:口令驗證及密鑰驗證,可有效避免大部分的攻擊;
使用上述命令測試連接性及驗證流程;
通過 ssh-keygen 工具生成本地公鑰文件,常用命令如下:
在 $HOME/.ssh/ 目錄下,會新生成兩個文件: id_rsa.pub 和 id_rsa 。 id_rsa.pub 是公鑰, id_rsa 是私鑰,其中 id_rsa 為默認文件名稱,若如上圖指定了文件路徑及名稱,則按照指定路徑及文件名生成;
說明:若 ssh 登錄使用密鑰驗證方式登錄,則需要輸入私鑰的密碼(生成密鑰時指定的密碼),若使用 ssh-agent 代理,則在同一個 session 會話下,只需要輸入一次私鑰密碼即可,由 ssh-agent 幫我們代理,避免每次登錄都需要輸入私密碼;
若登錄時未開啟,可手動開啟 ssh-agent ,可通過如下命令:
添加生成的 SSH key 到 ssh-agent :
查看添加的 SSH key :
若需要免密登錄,則需要將用戶的 public key 文件內存追加復制到登錄主機的 authorized_keys 配置文件中(默認路徑為 ~/.ssh/authorized_keys ),或者直接通過 ssh--id 工具完成,具體如下:
使用上述命令後即可實現 免密登錄 ;
ssh 配置包括系統級別的(針對客戶端的默認為 /etc/ssh/ssh_config ,針對服務端的``/etc/ssh/sshd_config )及用戶級別的配置文件(默認為 ~/.ssh/config`);且配置文件存在優先順序,低優先順序的配置項可視作默認值;而高優先順序的配置項則會覆蓋默認值。按優先順序,有如下排序:
/etc/ssh/config 配置文件選項如下:
/etc/ssh/sshd_config 配置文件選項如下:
常用的選項如下:
ssh -T [email protected] 驗證連接性,成功如下:
ssh配置文件詳解
git-ssh 配置和使用
ssh-keygen - Generate a New SSH Key
最佳搭檔:利用 SSH 及其配置文件節省你的生命