0%

ssh 基本

基本用法

SSH 是一種安全加密傳輸協定,絕大部分的 Linux 伺服器都會提供 SSH 的連線服務,讓使用者或管理者遠端連線進來,透過 Linux 的 shell 來處理各種工作或系統管理。

在 Linux 系統上若要使用 SSH 連線至遠端的另外一台 Linux 伺服器,可以使用 ssh 這個指令,其語法為:

1
$ ssh 帳號@主機

舉例來說,如果要以 alpine 這個帳號登入 192.168.0.1 這台主機,就執行:

1
$ ssh alpine@192.168.0.1

指定連接埠號

標準的 SSH 服務會使用 22 連接埠,但這不是強制性的,許多伺服器會因為安全性因素,改用其他的連接埠,若遇到使用非正規連接埠號的伺服器,我們可以使用 -p 指定埠號,例如指定埠號為 2222

1
$ ssh -p 2222 alpine@192.168.0.1

遠端執行指令

1
$ ssh alpine@192.168.0.1 ls -l

安全加密通道

安全加密通道(SSH tunnel)是建立在 SSH 連線之上的連線通道,任何不具備加密功能的網路連線軟體,只要透過這個通道建立連線,即可受到 SSH 加密連線的保護,避免傳輸的資料被輕易側錄與竊取。

ssh 可以建立的安全加密通道類型總共有四種,第一種是從本地端連線至遠端主機:

1
2
3
# 讓本地端 1234 連接埠連接至 192.168.0.1 主機
# 的 localhost:5678 連接埠
$ ssh -NL 1234:localhost:5678 alpine@192.168.0.1

第二種是從本地端連線至遠端主機後方的另外一台主機:

1
2
3
# 讓本地端 1234 連接埠連接至 192.168.0.2 主機
# 的 5678 連接埠
$ ssh -NL 1234:192.168.0.2:5678 alpine@192.168.0.1

第三種是從遠端連線至本地端

1
2
3
# 讓 192.168.0.1 主機的 1234 連接埠連接至
# 本地端的 localhost:5678 連接埠
$ ssh -NR 1234:localhost:5678 alpine@192.168.0.1

遠端複製與備份檔案

若需要在 Linux 伺服器之間複製或備份檔案,可以使用 rsync 這個指令,它預設就會自動使用 ssh 建立安全加密的連線來進行備份:

1
2
# 用 rsync 透過 ssh 連線備份檔案
$ rsync -avzh /backup/myfile.gz alpine@192.168.1.2:/mybackup/

主機金鑰變更問題

每台開啟 SSH 服務的 Linux 主機,都會自己產生一組獨一無二的主機金鑰,ssh 在連線時都會去核對自己紀錄中的主機金鑰與收到的主機金鑰是否吻合。

當我們的 Linux 伺服器進行一些系統變更時(例如重灌系統),就有可能會改變伺服器上的主機金鑰,隨後 ssh 在檢查主機金鑰時就會發現金鑰不對,而出現這樣的警告訊息:

1
2
3
4
5
6
7
8
9
10
11
12
13
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:Llaul7Wqs6bo2H1YTvNpEmRSAozuIRJCsFuDqBt64lk.
Please contact your system administrator.
Add correct host key in /home/alpine/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/alpine/.ssh/known_hosts:1
ECDSA host key for dendrite02 has changed and you have requested strict checking.
Host key verification failed.

遇到這種狀況時,可將 ~/.ssh/known_hosts 這個主機金鑰紀錄刪除,讓 ssh 自動重新抓取新的主機金鑰即可:

1
$ rm ~/.ssh/known_hosts

不過由於這個檔案包含所有連線過的主機金鑰,所以若整個刪除的話,其他主機的金鑰之後也要重新抓取,如果不想這樣的話,也可以開啟這個設定檔,把對應的那一行主機金鑰刪除即可。