在上一篇文章中,我們透過 SSH 密鑰生成(Key Generation)為安全的 SSH 連接做好了準備。
上一篇文章連結 : SSH keygen:完整的新手指南
現在是時候了解如何真實地使用 SSH 來訪問遠端伺服器了。SSH 的命令比想象中簡單,但了解一些原則和有用的選項能幫助我們更加高效地使用它。
SSH 命令,該如何撰寫呢?
SSH 命令的基本格式如下:
ssh [選項] [用戶名]@[主機地址] [命令]
讓我們仔細看看每一個要素的含義吧?
-
ssh
: 執行 SSH 客戶端的命令。 -
[選項]
: 可以指定各種控制 SSH 連接方式的選項。例如,使用特定的密鑰文件或設置端口轉發等功能。(下文會詳細介紹。) -
[用戶名]
: 要訪問的遠端伺服器的用戶賬號名稱。如果本地計算機的用戶名和遠端伺服器的用戶名相同,可以省略。 -
[主機地址]
: 要訪問的遠端伺服器的 IP 地址或域名。 -
[命令]
(選擇性): 如果在 SSH 連接後希望立即執行某個命令,則在此輸入。執行完這個命令後,SSH 會話將結束。如果省略這部分,可以登錄到伺服器並使用交互式的 Shell。
命令撰寫原則及易記的小技巧
SSH 命令的結構是清晰地指示「哪個用戶要訪問哪個伺服器?」。
-
基本原則:
ssh 用戶名@主機地址
- 示例:
ssh ubuntu@192.168.1.100
(使用ubuntu
賬號訪問 192.168.1.100 伺服器) - 示例:
ssh root@mywebserver.com
(使用root
賬號訪問 https://www.google.com/search?q=mywebserver.com 伺服器) -
易記的小技巧:
-
「我(本地用戶)想進入那邊(遠端伺服器)的誰(遠端用戶)!」 可以這樣思考。
ssh
(我要連接)[用戶名]@
(誰)[主機地址]
(哪裡)- 經常連接的伺服器可以利用
~/.ssh/config
文件,不用每次都輸入長長的地址,可以使用別名(Alias)來方便連接。 (這部分在下篇文章中會詳細介紹!)
- 示例:
有用的 SSH 選項解析
SSH 擁有多種選項,提供強大的功能以適應各種情況。這裡介紹幾個關鍵選項。
1. -i <IdentityFile>
:指定特定的私鑰文件
當你擁有多個 SSH 密鑰時,想要為訪問特定伺服器使用特定的私鑰時使用。默認使用 ~/.ssh/id_rsa
或 ~/.ssh/id_ed25519
,但在創建了其他名稱或管理多個密鑰時非常有用。
- 用法:
ssh -i ~/.ssh/my_custom_key ubuntu@my_server.com
-
示例:
ssh -i ~/.ssh/id_ed25519_my_server ubuntu@example.com
Enter passphrase for key '/home/youruser/.ssh/id_ed25519_my_server':
2. -p <Port>
:指定遠端伺服器的 SSH 端口
大多數 SSH 伺服器默認使用 22 號端口。但出於安全原因,管理員經常會更改 SSH 端口。這時需要使用 -p
選項來指定更改的端口號。
- 用法:
ssh -p 2222 your_user@your_server.com
(訪問 2222 端口) -
示例:
ssh -p 2222 myuser@192.168.1.100 The authenticity of host '192.168.1.100:2222 (...)' can't be established. Are you sure you want to continue connecting (yes1/no/[fingerprint])? yes Warning: Permanently added '192.168.1.100:2222' (ED25519) to the list of known hosts. Last login: Mon Jun 17 10:00:00 2024 from your_ip myuser@server:~ $
3. -X
:啟用 X11 轉發(運行圖形程序)
當遠端伺服器上安裝有 GUI(圖形用戶介面)應用程序,想要在本地計算機的屏幕上顯示以便使用時使用。它使用 X Window System,並且本地系統必須運行 X 伺服器(macOS 需要 XQuartz,Windows 需要 PuTTY + VcXsrv 等)。
- 用法:
ssh -X your_user@your_server.com
-
示例:
ssh -X myuser@remote-gui-server.com myuser@remote-gui-server:~ $ firefox &
連接後在遠端伺服器執行 firefox (本地屏幕上會彈出 firefox 窗口)。
性能差或網絡延遲大時可能會感到不便。
4. -L <LocalPort>:<RemoteHost>:<RemotePort>
:本地端口轉發(Local Port Forwarding)
通過 SSH 隧道將來自本地計算機特定端口(LocalPort)的連接轉發到遠端伺服器(RemoteHost)特定端口(RemotePort)的功能。主要用於訪問防火牆後的服務,或本地開發的應用程序需要訪問遠端數據庫時非常有用。
- 用法:
ssh -L 8080:localhost:80 your_user@your_server.com
- 這個命令會將所有進入本地計算機 8080 端口的連接通過
your_server.com
轉發到your_server.com
內部的 80 端口(localhost:80
指your_server.com
本身)上。
- 這個命令會將所有進入本地計算機 8080 端口的連接通過
-
示例:
-
當無法直接訪問遠端伺服器的網頁伺服器(80 端口),只能使用 SSH 時:
ssh -L 8080:localhost:80 myuser@my_web_server.com
執行完這個命令後,在本地網頁瀏覽器中訪問 http://localhost:8080
實際上相當於訪問 my_web_server.com 的 80 端口。 -
當本地的
my_db_app
需要訪問遠端db_server.internal
的 3306 端口 MySQL 而db_server.internal
只能從my_app_server.com
訪問時:ssh -L 3307:db_server.internal:3306 myuser@my_app_server.com
執行此命令後,當本地的 my_db_app 訪問 localhost:3307 時
將通過 my_app_server.com 訪問 db_server.internal 的 3306 端口。-
(使用 3307 的原因是因為本地可能已經有使用 3306 端口的 MySQL)
-
-
5. -N
:僅維持端口轉發,不執行遠端命令
與 -L
或 -D
(動態端口轉發,SOCKS 代理)選項一起使用,打開 SSH 會話但不執行遠端伺服器上的 Shell 命令,而僅保留端口轉發功能。主要在背景中維持端口轉發隧道時非常有用。
- 用法:
ssh -N -L 8080:localhost:80 your_user@your_server.com
-
示例:
ssh -N -L 8080:localhost:80 myuser@my_web_server.com &
在背景中(&)開啟端口轉發隧道後,可以在本地訪問網頁瀏覽器
6. -f
:將 SSH 會話切換到後台
SSH 連接成功後,將 SSH 客戶端進程送入後台的選項。通常與 -N
選項一起使用,以在後台維持端口轉發隧道。
- 用法:
ssh -f -N -L 8080:localhost:80 your_user@your_server.com
-
示例:
ssh -f -N -L 8080:localhost:80 myuser@my_web_server.com
執行此命令後,終端控制權會立即返回,而 SSH 隧道在後台運行。
可以使用 ps aux | grep ssh 命令確認進程
總結
在本文中,我們注意了 SSH 命令的基本結構及常用的核心選項。特別是利用 -p
進行端口指定和利用 -L
進行端口轉發的部分在實務中非常常用,建議一定要掌握。
在下篇文章中,我們將探討如何利用 ~/.ssh/config
文件來更方便地管理 SSH 連接。如果有任何疑問,隨時留言給我!
目前沒有評論。