快轉到主要內容
  1. 文章/

SSH 教學:SSH 與 SCP

··
技術 SSH
Toast
作者
Toast
Toast 是一位分享知識、生活和其他的部落客。他也是台灣的一名學生。

最近因為在工作上、學校經常用到 SSH 連線這個技術,因此想說來寫一篇使用使用 SSH 連線遠端主機的教學。順道教學一下如何利用 SCP 來將檔案在 client 端與 server 端互相傳遞。

ps. 本教學將專注於初階技術面,不探討過於理論的知識,並且技術面只介紹 client 端的操作。本文章也會隨著研究慢慢深入

SSH 是什麼
#

就如同大多數技術文章一樣,開頭都會不免俗得介紹一下該技術。

SSH,全名 Secure Shell,是一種能夠安全進行遠端連線的協定。使用 SSH 可以讓你連接遠端主機,並可在遠端主機與本地主機間傳遞檔案。

此外,由於傳遞過程有經過加密,因此相較於其他檔案傳輸協定(Telnet)而言較為安全。

img

圖片來源:What is SSH Protocol?.Wallarm.https://www.wallarm.com/what/what-is-ssh-protocol

SSH 連線
#

檢查環境
#

在進行 SSH 連線前,我們得先知道自己所在的環境是否支援 SSH 連線。雖然大多數作業系統皆支持 SSH client 端連線,但我們可以透過輸入以下指令來確認是否有安裝 SSH。

ssh

如果出現不是內部或外部命令這種報錯訊息的話,以 Window 10/11 為例,需要透過安裝 OpenSSH 是否啟用。

正式連線
#

一般我們在連線前,必須知道以下資訊:

  • 遠端主機位址(Host):可以是 ip 位址,例如 140.122.1.23;或者是 Domain,例如 my-server.com
  • 使用者名稱(Username):在遠端 server 允許的使用者名稱
  • 使用者密碼(password):第一次連線時,需要密碼才能進行連線,之後可以透過其他方式免密碼登錄
  • Port:一般預設為 22,如果你的遠端 server 有特定的 port,需要額外知道

知道以上資訊後,輸入下方這條指令後即可連線:

ssh username@host

如果需要指定 port 的話請輸入:

ssh -p port username@host

之後可能會要求輸入密碼、fingerprint 確認。一律依照 terminal 指示去做就好。 以上流程都順利執行完成後,即可完成連線。

關閉連線
#

執行以下指令即可關閉 SSH 連線:

exit

免密碼連線
#

如果每次都需要密碼才能連線的話,是不是很麻煩呢?有一種方法可以透過 rsa 加密金鑰來進行 SSH 連線,這種方法就可以讓相同 client 端不透過密碼就能夠連線至 server 端,以下是操作步驟。

首先我們必須輸入以下指令,生成 rsa 金鑰

ssh-keygen -t rsa

輸入完成後,下面應該會出現一堆讓你填入的東西,這邊我們都不填入,即可使用預設值創建 rsa 金鑰。出現下面畫面後,就完成 rsa 金鑰生成了。

Your identification has been saved in /home/username/.ssh/id_rsa_ubuntu.
Your public key has been saved in /home/username/.ssh/id_rsa_ubuntu.pub.
The key fingerprint is:
SHA256:nNnQckFbuegUs4WD3y+7YqwCaDhfUlX2J17jxF7X3FU [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|       .o++ ..  E|
|      .  *o+.  ..|
|     .  = *+ o ..|
|    .  . Ooo+ * +|
| . o    Soo..B o.|
|o + o     . ..o  |
| + o .   .  . .  |
|  .   .   +  o   |
|       ..o .o.   |
+----[SHA256]-----+

如果之前沒有指定路徑的話,rsa 私鑰與公鑰都會放在 .ssh 資料夾底下。其中私鑰為 .ssh/id_rsa,用來辨識身分,需要妥善保管不能被竊取;公鑰為 .ssh/id_rsa.pub,用來放在遠端 server 上,進行連線時會和私鑰配對。

.ssh
├── id_rsa
├── id_rsa.pub
└── ...

我們可以透過下方指令將 id_rsa.pub 放到遠端:

cat .ssh/id_rsa.pub
ssh username@host 'cat >> .ssh/authorized_keys'

這樣子就可以免密碼連線該遠端主機了。

設定連線資料
#

如果每次連線,都需要輸入 username 與 host 的話,實在是很麻煩。因此,我們可以透過在本地端設定連線資料的方式,先將連線資料填入後,直接輸入一個主機名字就可以連線了。

首先我們前往 ~/.ssh/config 這個檔案,如果沒有可以直接創一個。之後在 config 中填入以下資訊。

Host A
    HostName 11.111.111.11
    User B
    Port C

其中 Host 是指這個遠端主機在你的本地代表的名字,可以自己取,之後也會用他來代表整個遠端主機。

設定完成後,我們只要輸入以下指令就可以連線了:

ssh A

SCP
#

SCP 可以用來支援 Linux 本地端與遠端間的資料複製。利用 SSH 安全加密的方式將檔案從遠端傳到本地端,或是本地端上傳到遠端。同樣的在 mac OS 與 Windows 也可以進行。

複製一個檔案
#

今天如果想從本地傳一個檔案到遠端,可以輸入以下指令:

scp <local_path> <username@host>:<host_path>

反過來如果想要從雲端傳一個檔案到本地的話,可以這樣輸入:

scp <username@host>:<host_path> <local_path>

這樣就可以完成檔案複製了

複製一個目錄
#

如果我們想要複製一個目錄到雲端的話,我們可以透過加上 -r 來進行整個目錄的複製,反之亦然。

scp -r  <local_path> <username@host>:<host_path>

資料壓縮
#

如果想要壓縮傳輸一個資料夾的話,-r-C 都要加,順序不拘。

如果不想占用太多頻寬,我們可以透過 -C 來先將檔案壓縮後再傳上去雲端。

scp -C <local_path> <username@host>:<host_path>

結語
#

以上就是本教學的內容,希望對你在未來的工作有幫助。

參考資料
#