共計 4973 個字符,預計需要花費 13 分鐘才能閱讀完成。
這篇文章主要講解了“SSH 遠程登陸 Linux 主機怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“SSH 遠程登陸 Linux 主機怎么實現”吧!
什么是 SSH?
SSH 是一種網絡協議,用于計算機之間的加密登錄。最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995 年,芬蘭學者 Tatu Ylonen 設計了 SSH 協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為 Linux 系統的標準配置。
SSH 登錄原理
SSH 基本用法
語法:
ssh -p 22 user@host
參數:
-p:指定端口號。
user:登錄的用戶名。
host:登錄的主機。
默認的端口號為 22,當端口號為 22 的時候,可以省略,直接使用如下方式:
ssh user@host
此外,如果本地正在使用的用戶名與遠程登錄的用戶名一致,登錄用戶名也是可以省略的,即如下:
ssh host
SSH 遠程登錄實例
現在我有兩臺 linux 虛擬機,上面安裝都是 centOS6.5,ip 分別為 192.168.13.135 和 192.168.13.138,如下圖:
現在,我需要操作的是通過 SSH 在 192.168.13.138 上面,登錄到 192.168.13.135 上面。
首先,我們可以使用如下命令,查看兩臺機器是否啟用了 ssh。
netstat -ntlp |grep ssh
使用如下命令進行連接。
ssh -p 22 root@192.168.13.135
若在本機上是首次登錄該遠程主機,則會出現如下界面。
大致意思就是,無法確認 host 主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎?輸入 yes 即可。
然后輸入密碼,即可連接 ok 了。
要想退出,直接輸入 exit 即可。
SSH 端口轉發
SSH 不僅僅能夠自動加密和解密 SSH 客戶端與服務端之間的網絡數據,同時,SSH 還能夠提供了一個非常有用的功能,那就是端口轉發,即將 TCP 端口的網絡數據,轉發到指定的主機某個端口上,在轉發的同時會對數據進行相應的加密及解密。如果工作環境中的防火墻限制了一些網絡端口的使用,但是允許 SSH 的連接,那么也是能夠通過使用 SSH 轉發后的端口進行通信。轉發,主要分為本地轉發與遠程轉發兩種類型。
1. 轉發的參數
-C:壓縮數據 -f :后臺認證用戶 / 密碼,通常和 - N 連用,不用登錄到遠程主機。 -N :不執行腳本或命令,通常與 - f 連用。 -g :在 -L/-R/- D 參數中,允許遠程主機連接到建立的轉發的端口,如果不加這個參數,只允許本地主機建立連接。 -L : 本地端口: 目標 IP: 目標端口 -D : 動態端口轉發 -R : 遠程端口轉發 -T :不分配 TTY 只做代理用 -q :安靜模式,不輸出 錯誤 / 警告 信息
2. 本地轉發
有本地網絡服務器的某個端口,轉發到遠程服務器某個端口。說白了就是,將發送到本地端口的請求,轉發到目標端口。格式如下:
ssh -L 本地網卡地址: 本地端口: 目標地址: 目標端口 用戶 @目標地址。
現在我們利用本地轉發來解決一個問題,比如我們有兩臺機器,如下:
centos A(192.168.13.139)
centos B(192.168.13.142)
現在,centos B(192.168.13.142)機器上面安裝了 mysql,并設置了運行任何主機連接,如下:
此時,在 centos A(192.168.13.139)上面是可以連上 centos B(192.168.13.142)的 mysql,如下:
那么,現在我開始 centos B(192.168.13.142)限制不允許外部 ip 連接,僅僅讓 127.0.0.1 連接,如下:
此時,centos A(192.168.13.139)上面怎么連接上 centos B(192.168.13.142)的 mysql 呢?
此時,我們還是使用上面的 mysql 連接方式,肯定會報錯,如下:
當然在 centos B(192.168.13.142)mysql 還是可訪問的。
這個時候,我們就可以使用本地端口轉發了,將本地的某個端口,映射到 centos B(192.168.13.142)機器上面的,如下:
ssh -L 127.0.0.1:3306:127.0.0.1:3306 root@192.168.13.142
因為本地網卡地址是可以省略的,上面的轉發,可以簡寫為:
ssh -L 3306:127.0.0.1:3306 root@192.168.13.142
當然,ssh 連接的時候,若兩臺機器的用戶名相同,也是可以省略的,即命令可以簡寫為:
ssh -L 3306:127.0.0.1:3306 192.168.13.14
上面的代碼就是將本地的 3306 端口,轉發到 192.168.13.142 的 3306 端口。因為 centos B(192.168.13.142)上面的 mysql 使用的 3606 端口。當然,我們首先得看看本地的 3306 端口是否被占用,如被占用,可以使用其他的端口。
數據流向如圖:
首先,centos A(192.168.13.139)上的應用將數據發送到本地的 127.0.0.1 上面的 3306 端口。
然后,centos A(192.168.13.139)將 3306 端口的數據,通過 SSH 轉發到 centos B(192.168.13.142)的 3306 端口。
接著,centos B(192.168.13.142)將處理后的數據,原路返回給 centos A(192.168.13.139)。
如果是首次通過 ssh 連接 cetosB 該機器,則會提示確認公鑰,并讓你選擇是否確定連接。
此時,我們在 centos A 上面連接 centos B 上面的 mysql,就可以這么寫了。
bin/mysql -h227.0.0.1 -uroot -p
如下:
我們可以通過下面命令,在 centosA 查看 ssh 轉發監聽的進程。
3. 遠程轉發
由遠程服務器的某個端口,轉發到本地網絡的服務器某個端口。說白了,就是將發送到遠程端口的請求,轉發到目標端口。格式如下:
ssh -R 遠程網卡地址: 遠程端口: 目標地址: 目標端口
下面三臺機器為例,如下:
centos A(192.168.13.139)
centos B(192.168.13.142)
win7(10.18.78.135)
假設,win7(10.18.78.135)與 centos B(192.168.13.142)不能直接連接,但是 win7(10.18.78.135)與 centos A(192.168.13.139)可以連接 centos B(192.168.13.142)也可以 centos A(192.168.13.139)連接,那么,我們就可以在 centos A(192.168.13.139)上面使用遠程端口轉發了,讓 win7(10.18.78.135)與 centos B(192.168.13.142)進行通信。
ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.142
即 centos B(192.168.13.142)監聽自己的 80 端口,然后將所有數據,由 centos A(192.168.13.139)發給 win7(10.18.78.135)。
SSH 的遠程操作
ssh 遠程操作,主要用于在遠程的機器上面執行某個操作,格式如下:
ssh user@host
command
案例 1、在機器 A(192.168.13.148)中查看機器 B(192.168.13.149)的操作系統類型。
在 A 機器上面執行如下代碼:
ssh dequan@192.168.13.149 uname -a
案例 2、將機器 A(192.168.13.148)中 test 文件夾復制到 B 機器(192.168.13.149)。
在 A 機器上面,執行如下命令:
tar -cz test | ssh dequan@192.168.13.149 tar -xz
當然,我們也可以使用 scp 命令或 rz 命令,傳輸文件。
案例 3、在機器 A(192.168.13.148)處查看 B 機器(192.168.13.149)是否監聽了 1080 端口。
在 A 機器上面,執行如下命令:
ssh dequan@192.168.13.149 netstat -tln |grep 1080
SSH 的本地轉發
本地轉發,說白了,就是把發到本地的某個端口請求,轉發到遠程的某臺機器上面。格式如下:
ssh -L [本地地址:] 本地端口: 遠程地址: 遠程端口 遠程用戶 @遠程地址
案例 1、在機器 B(192.168.13.149)上面訪問機器 A(192.168.13.148)的服務。
現在,我們在 A 機器上面,啟動了 Nginx 服務,如下:
我們希望 B 機器也能夠這樣使用 A 機器上面的服務。需要把 B 機器上面 80 端口請求,轉發到 A 機器上面。目前在 B 機器這樣執行,是報錯的,如下:
需要在 B 機器上面,執行如下代碼:
ssh -f -N -L 127.0.01:80:192.168.13.148:80 dequan@192.168.13.148
然后,在 B 機器上面,訪問 A 機器的服務,就想訪問自身的服務一樣。
SSH 的遠程轉發
遠程轉發,即把發給遠程機器的某個端口請求,轉發到本地的機器上面。格式如下:
ssh -R [遠程地址:] 遠程端口: 本地地址: 本地端口 遠程用戶 @遠程地址
在上面的案例中,我們也可以通過遠程轉發來實現。即在 A 機器上面執行如下代碼:
sudo ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
我們監聽了 B 機器的 8081 端口,把該端口的請求,轉發到 A 機器上面。
可以在 B 機器上面看到,我們的監聽,如下:
此時,執行如下命令,就會被轉發到 A 機器的 127.0.0.1 的 80 端口,如下:
1、利用遠程轉發,實現代理功能
目前 B 機器,只能在自己 127.0.0.1 的 80 端口監聽并轉發,如何讓 B 機器作為代理,轉發其他機器的請求到 A 機器上面呢?比如,現在有一臺機器 C(192.168.13.143),C 不能訪問 A,但是能夠訪問 B。如何讓 C 利用 B 來訪問 A 呢?
此時,需要將 B 的監聽,由 127.0.0.1:8081,改為 0:0.0.0:8081,修改 sshd 的配置 /etc/ssh/sshd_config。
vim /etc/ssh/sshd_config #如果有 GatewayPorts no #改為 GatewayPorts yes #沒有,添加即可 # 然后重啟 sshd sudo service sshd restart
然后重新,設置動態轉發,如下:
ssh -f -g -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
可以看到,此時 B 機器,已經監聽了 0:0.0.0:8081
在 C 機器上面,我們通過 curl 模擬請求,利用 B 機器做代理,如下:
curl -x 192.168.13.149:8081 127.0.0.1
當然,如果還有其他機器,也可以使用類似的方式,來請求 A 機器。
SSH 的動態轉發
對于 SSH 的本地轉發和遠程轉發,都需要將本地端口和遠程端口一一綁定,格式如下:
ssh -D [本地地址:] 本地端口號 遠程用戶 @遠程地址
比如,把發到 B 機器上面的請求,都轉發到 A 機器上面,讓 A 機器去執行請求。
SSH 存在的問題
如果有人截獲了登錄請求,然后冒充遠程主機,將偽造的公鑰發給用戶,那么用戶很難辨別真偽。因為不像 https 協議,SSH 協議的公鑰是沒有證書中心(CA)公證的,也就是說,都是自己簽發的。
可以設想,如果攻擊者插在用戶與遠程主機之間(比如在公共的 wifi 區域),用偽造的公鑰,獲取用戶的登錄密碼。再用這個密碼登錄遠程主機,那么 SSH 的安全機制就蕩然無存了。這種風險就是著名的 中間人攻擊(Man-in-the-middle attack)。
感謝各位的閱讀,以上就是“SSH 遠程登陸 Linux 主機怎么實現”的內容了,經過本文的學習后,相信大家對 SSH 遠程登陸 Linux 主機怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!