使用ssh工具訪問Linux服務器的基本方法
第一步,開啟工作站上防火牆的相應端口,SSH是22。
第二步,開啟SSH服務。
先查看ssh的狀態。
復制代碼代碼如下:service sshd status
開啟服務,
復制代碼代碼如下:service sshd start
當然也可以關閉了,
復制代碼代碼如下:service sshd stop
重啟服務,
復制代碼代碼如下:sshd restart
第三步,修改配置文件,/etc/ssh/sshd_config
打開這個文件,在最後的地方AllowUsers,添加用戶名,多個就用空格隔開,當然也可以添加root。如果想禁用root 登錄也可以,這裡不添加。同時可以在這個文件中找到一個語句: Permitrootlogin yes。將yes改為no就可以了。
第四步,設置ssh隨機啟動
復制代碼代碼如下:chkconfig --level xxxx sshd on //xxxx表示你要的等級(應該這麼說吧),例如2345等
第五步,遠程登錄
復制代碼代碼如下:ssh usrname@hostname //hostname或者Ip
然後就是要你輸入密碼了。登錄後,也可以更改用戶(su 命令)。如何希望有圖形,也不是不可以,在登錄的時候加上 -X (大寫的X):ssh -X usrname@hostname。
這樣勉強可以吧,也有圖形界面了,就是反映比較慢,應急可以。
通過反向 SSH 隧道訪問 NAT 後面的 Linux 服務器
什麼是反向 SSH 隧道?
SSH 端口轉發的一種替代方案是 反向 SSH 隧道。反向 SSH 隧道的概念非常簡單。使用這種方案,在你的受限的家庭網絡之外你需要另一台主機(所謂的“中繼主機”),你能從當前所在地通過 SSH 登錄到它。你可以用有公網 IP 地址的 VPS 實例 配置一個中繼主機。然後要做的就是從你的家庭網絡服務器中建立一個到公網中繼主機的永久 SSH 隧道。有了這個隧道,你就可以從中繼主機中連接“回”家庭服務器(這就是為什麼稱之為 “反向” 隧道)。不管你在哪裡、你的家庭網絡中的 NAT 或 防火牆限制多麼嚴格,只要你可以訪問中繼主機,你就可以連接到家庭服務器。
在 Linux 上設置反向 SSH 隧道
讓我們來看看怎樣創建和使用反向 SSH 隧道。我們做如下假設:我們會設置一個從家庭服務器(homeserver)到中繼服務器(relayserver)的反向 SSH 隧道,然後我們可以通過中繼服務器從客戶端計算機(clientcomputer) SSH 登錄到家庭服務器。本例中的中繼服務器 的公網 IP 地址是 1.1.1.1。
在家庭服務器上,按照以下方式打開一個到中繼服務器的 SSH 連接。
復制代碼代碼如下:homeserver~$ ssh -fN -R 10022:localhost:22 [email protected]
這裡端口 10022 是任何你可以使用的端口數字。只需要確保中繼服務器上不會有其它程序使用這個端口。
“-R 10022:localhost:22” 選項定義了一個反向隧道。它轉發中繼服務器 10022 端口的流量到家庭服務器的 22 號端口。
用 “-fN” 選項,當你成功通過 SSH 服務器驗證時 SSH 會進入後台運行。當你不想在遠程 SSH 服務器執行任何命令,就像我們的例子中只想轉發端口的時候非常有用。
運行上面的命令之後,你就會回到家庭主機的命令行提示框中。
登錄到中繼服務器,確認其 127.0.0.1:10022 綁定到了 sshd。如果是的話就表示已經正確設置了反向隧道。
復制代碼代碼如下:relayserver~$ sudo netstat -nap | grep 10022
復制代碼代碼如下:tcp 0 0 127.0.0.1:10022 0.0.0.0:* LISTEN 8493/sshd
現在就可以從任何其它計算機(客戶端計算機)登錄到中繼服務器,然後按照下面的方法訪問家庭服務器。
復制代碼代碼如下:relayserver~$ ssh -p 10022 homeserver_user@localhost
需要注意的一點是你在上面為localhost輸入的 SSH 登錄/密碼應該是家庭服務器的,而不是中繼服務器的,因為你是通過隧道的本地端點登錄到家庭服務器,因此不要錯誤輸入中繼服務器的登錄/密碼。成功登錄後,你就在家庭服務器上了。
通過反向SSH 隧道直接連接到網絡地址變換後的服務器
上面的方法允許你訪問 NAT 後面的 家庭服務器,但你需要登錄兩次:首先登錄到 中繼服務器,然後再登錄到家庭服務器。這是因為中繼服務器上 SSH 隧道的端點綁定到了回環地址(127.0.0.1)。
事實上,有一種方法可以只需要登錄到中繼服務器就能直接訪問NAT之後的家庭服務器。要做到這點,你需要讓中繼服務器上的 sshd 不僅轉發回環地址上的端口,還要轉發外部主機的端口。這通過指定中繼服務器上運行的 sshd 的 GatewayPorts 實現。
打開中繼服務器的 /etc/ssh/sshd_conf 並添加下面的行。
復制代碼代碼如下:
relayserver~$ vi /etc/ssh/sshd_conf
GatewayPorts clientspecified
重啟 sshd。
基於 Debian 的系統:
復制代碼代碼如下:relayserver~$ sudo /etc/init.d/ssh restart
基於紅帽的系統:
復制代碼代碼如下:relayserver~$ sudo systemctl restart sshd
現在在家庭服務器中按照下面方式初始化一個反向 SSH 隧道。
復制代碼代碼如下:homeserver~$ ssh -fN -R 1.1.1.1:10022:localhost:22 [email protected]
登錄到中繼服務器然後用 netstat 命令確認成功建立的一個反向 SSH 隧道。
復制代碼代碼如下:relayserver~$ sudo netstat -nap | grep 10022
復制代碼代碼如下:tcp 0 0 1.1.1.1:10022 0.0.0.0:* LISTEN 1538/sshd: dev
不像之前的情況,現在隧道的端點是 1.1.1.1:10022(中繼服務器的公網 IP 地址),而不是 127.0.0.1:10022。這就意味著從外部主機可以訪問隧道的另一端。
現在在任何其它計算機(客戶端計算機),輸入以下命令訪問網絡地址變換之後的家庭服務器。
復制代碼代碼如下:
clientcomputer~$ ssh -p 10022 [email protected]
在上面的命令中,1.1.1.1 是中繼服務器的公共 IP 地址,homeserver_user必須是家庭服務器上的用戶賬戶。這是因為你真正登錄到的主機是家庭服務器,而不是中繼服務器。後者只是中繼你的 SSH 流量到家庭服務器。
在 Linux 上設置一個永久反向 SSH 隧道
現在你已經明白了怎樣創建一個反向 SSH 隧道,然後把隧道設置為 “永久”,這樣隧道啟動後就會一直運行(不管臨時的網絡擁塞、SSH 超時、中繼主機重啟,等等)。畢竟,如果隧道不是一直有效,你就不能可靠的登錄到你的家庭服務器。
對於永久隧道,我打算使用一個叫 autossh 的工具。正如名字暗示的,這個程序可以讓你的 SSH 會話無論因為什麼原因中斷都會自動重連。因此對於保持一個反向 SSH 隧道非常有用。
第一步,我們要設置從家庭服務器到中繼服務器的無密碼 SSH 登錄。這樣的話,autossh 可以不需要用戶干預就能重啟一個損壞的反向 SSH 隧道。
下一步,在建立隧道的家庭服務器上安裝 autossh。
在家庭服務器上,用下面的參數運行 autossh 來創建一個連接到中繼服務器的永久 SSH 隧道。
復制代碼代碼如下:
homeserver~$ autossh -M 10900 -fN -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 1.1.1.1:10022:localhost:22 [email protected]
“-M 10900” 選項指定中繼服務器上的監視端口,用於交換監視 SSH 會話的測試數據。中繼服務器上的其它程序不能使用這個端口。
“-fN” 選項傳遞給 ssh 命令,讓 SSH 隧道在後台運行。
“-o XXXX” 選項讓 ssh:
使用密鑰驗證,而不是密碼驗證。
自動接受(未知)SSH 主機密鑰。
每 60 秒交換 keep-alive 消息。
沒有收到任何響應時最多發送 3 條 keep-alive 消息。
其余 SSH 隧道相關的選項和之前介紹的一樣。
如果你想系統啟動時自動運行 SSH 隧道,你可以將上面的 autossh 命令添加到 /etc/rc.local。