ssh訪問遠程伺服器
㈠ SSH 之遠程登錄
從客戶端來看,SSH提供兩種級別的安全驗證。
對於第二種級別,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網路上傳送口令。第二種級別不僅加密所有傳送的數據,而且「中間人」這鉛乎種攻擊方式也是不可能的(因為他沒有用戶的私人密匙)。但是整個登錄的過程可能需要10秒。
將本地用戶生成的公鑰推送至遠程伺服器後,遠程主機將用戶的公鑰,保存在登錄後的用戶主目錄的$HOME/.ssh/authorized_keys文件中。公鑰就是一段字元串,只要把它追加在authorized_keys文件的末尾就行了。
這里不使用ssh--id命令,改用下面的命令,來解釋公鑰的保存過程:
輸入命令 ssh user@host ,然後根據提示輸入遠程伺服器的登錄密碼
也可在配置文件/etc/ssh/ssh_config 中設置user和host(ip), 來簡化命令, 配置如下:
配置後, 登錄請求時只需輸入如洞悉下命令:
使用密碼登錄,每次都必須輸入密碼,非常麻煩。好在SSH還提供了公鑰登錄,可以省去輸入密碼的步驟。
公鑰登錄原理 :就是用戶將自己的公鑰儲存在遠程主機上。登錄的時候,遠程主機會向用戶發送一段隨機字元串,用戶用自己的私鑰加密後,再發回來。遠程主機用事先儲存的公鑰進行解密,如果解密驗證成功,就證明用戶是可信的,直接允許登錄shell,不再要求密碼。
執行上述命令首先會讓你輸入生成密鑰的文件名: myPemKey (自定義),之後一路回車。
配置後,登錄遠槐顫悉程伺服器時只需輸入一下命令,便可直接登錄成功:
修改後重啟ssh服務
則遠程連接時指定埠
(1) 通過iptables設置ssh埠的白名單,如下設置只允許192.168.1.0/24網段的客戶機可以遠程連接本機
(2) 通過/etc/hosts.allow裡面進行限制(如下),/etc/hosts.deny文件不要任何內容編輯,保持默認!
例如:
修改遠程伺服器ssh服務配置文件/etc/ssh/sshd_config
修改遠程伺服器配置文件/etc/ssh/sshd_config, 如下:
如果本機系統有些賬號沒有設置密碼,而ssh配置文件里又沒做限制,那麼遠程通過這個空密碼賬號就可以登陸了,這是及其不安全的,所以一定要禁止空密碼登陸。
修改遠程伺服器配置文件/etc/ssh/sshd_config,如下:
參考:
㈡ Mac下使用SSH遠程登錄伺服器
MAC 是自帶SSH的,可以使用whereis查看是否存在,在終端執行下面的命令:
執行完後會列印存在路徑
之後查看現有進程,執行下列命令:
執行完後會列印現有進程,但是你會發現找不到ssh對應的進程
下列為我的終端執行命令後的結果
這時候如果直接使用SSH命令連接本地主機或者遠程主機會遇到下列錯誤:
解決方法:打開系統偏好設置,在共享中,打開遠程登錄,如下圖:
之後使用ssh localhost來測試一下,如果提示輸入密碼來認證就沒問題了。
之後再grep一下進程就可以看到ssh進程在運行了:
可以通過ssh命令連接其他主機,例如:
ssh [email protected]
也可以通過ssh命令連接其他伺服器,例如:ssh -p 埠 用戶名@伺服器ip地址
㈢ 【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-Key 登錄遠程伺服器
ssh 提供兩種級別的安全認證:
需要知道用戶名和密碼即可登錄,該連接是加凱缺密的,但客戶端不能確認目標主機是否為「偽造的」,也不能保證口令安全。
遠程主機的 /etc/ssh/sshd_config 需配置:
重啟 sshd 使改動生效:
需要用戶持有「公鑰/私鑰對」,慶褲遠程伺服器持有公鑰,本地持有私鑰。
客戶端向伺服器發出請求。伺服器收到請求之後,先在用戶的主目錄下找到該用戶的公鑰,然後對比用戶發送過來的公鑰。如果一致,伺服器用公鑰加密「質詢」並發送給客戶端。客戶端收到「質詢」後用私鑰解密,再發還給伺服器。認證結束。
生成 ssh-key,選加密演算法(rsa、dsa),給秘鑰命名(可選):
passphrase 是證書口令,以加強安全性,避免證書被惡意復制。
會在 ~.ssh 下生成 id_rsa , id_rsa.pub 兩個文件,分譽孫簡別是 私鑰/公鑰。
公鑰需保存到遠程伺服器 ~/.ssh/authorized_keys 里,私鑰由客戶端本地留存。
要保證 .ssh 和 authorized_keys 都只有用戶自己有寫許可權。否則驗證無效。
簡單情況下,通過手動指定私鑰文件登錄
覺得麻煩可以配置客戶端的 /etc/ssh/ssh_config
你也可以使用 SSH Agent,下面以使用 GitHub 為場景簡單介紹。
創建 ~/.ssh/config
配置完成後,在連接非默認賬號的倉庫時,遠端地址要修改為