建立 SSH 連線到遠端伺服器

簡介

目前開發的專案都會放在雲端伺服器上,雖然 Heroku 這種微服務很方便,但最常用的還是直接開一個虛擬機,但是每次開一個新的虛擬機都要設定一些東西,而第一步我就會先設定好 SSH,因為沒辦法在本機上連到伺服器作業真的是太痛苦了QQ

設定流程

以下示範新增使用者到使用 SSH 進行無密碼登入:

  1. 新增使用者
  2. 使用 SSH 進行無密碼登入

新增使用者

建立一般使用者

  1. sudo passwd重設sudo密碼
  2. su成為超級使用者
  3. adduser username新增使用者
  4. 將新增的 user 加入 sudo 清單
    1. vim /etc/sudoers開啟sudo列表
    2. 在其中加入以下內容:
      username = ALL(ALL:ALL) ALL
      

建立部署專用使用者

為了安全性考量,會建立一個專門用來部署專案的使用者,這個使用者不會有密碼。

  1. adduser --disabled-password deploy建立一個沒有密碼的使用者

使用 SSH 進行無密碼登入

當完成上一個步驟時,就已經可以用 ssh username@serve_ip 連上了,但由於這種方式需要輸入使用者密碼,像是部署專用使用者就無法連上了,因此可以依照以下步驟完成不用密碼登入。

  1. 確認本地有金鑰,如果沒有執行 ssh-keygen 建立金鑰。
  2. 檢視本地的金鑰 cat ~/.ssh/username-ssh-key.pub,並且複製。

    金鑰通常位於 ~/.ssh/ 這個目錄中,如果沒有就會在執行 ssh-keygen 的當前目錄,username換成你生成金鑰時輸入的使用者名稱。

  3. 把本地的公鑰複製到伺服器使用者的認證金鑰:
    mkdir ~/.ssh touch ~/.ssh/authorized_keys vim ~/.ssh/authorized_keys # 貼上本地的金鑰 chmod 700 ~/.ssh # 修改該目錄權限 chmod 644 ~/.ssh/authorized_keys # 修改該檔案權限
  4. 測試看看ssh username@server_ip

如果不行可以嘗試使用ssh -i ~/.ssh/username-ssh-key username@server_ip

到這一步正常來說就可以在本地以 SSH 的方式連上伺服器了。可喜可樂~可喜可樂~

結語

之前在嘗試建立 SSH 連線到 GCP 時,踩了許多坑,尤其是使用 ssh-copy-id 這種方式,直接讓我連 server 都 Ping 不到了,我也不知道為什麼,感覺應該是被 Ban 掉了,因此此篇紀錄的是目前試下來最穩的方式。