# SSH key設定 免密碼連線伺服器
## 1. 變更hostname
1. 連線至server
2. 利用sudo指令變更hostname
```
sudo hostname HW04
```
4. 使用exit指令離開server
5. 再重新連線
即可看到變更後的hostname
## 2. 下載PuTTY及PuTTYgen
連到[https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html](https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html)
分別下載PuTTY(putty.exe)及PuTTYgen(puttygen.exe)


## 3. 產生SSH Key(私鑰、公鑰)
1. 開啟終端機(不須連線到伺服器)
2. 輸入指令產生金鑰
```
ssh-keygen
```
此時會詢問3個問題:
* Enter file in which to save the key
* Enter passphrase
* Enter same passphrase again
都直接按下Enter後即可生成金鑰

3. 開啟檔案總管,到使用者的.ssh資料夾中確認已生成Public key(id_rsa.pub)及Private key(id_rsa)

## 4. 將SSH Key(公鑰)傳送到要連線的Server端
1. 開啟第二個終端,連線到伺服器(自己的帳號),再輸入以下語法
```
mkdir .ssh
```
若帳號下沒有.ssh資料夾,則會成功建立一個.ssh資料夾;反之,若已存在.ssh資料夾,則會建立失敗

2. 回到未連線到伺服器的終端,輸入以下語法以便將剛才產生的Public key傳送到伺服器中:
```
scp 本地端Public_key路徑 帳號@IP位址:/帳號路徑/.ssh/傳過去後的名稱.pub
```
若指令輸入無誤,將需輸入伺服器密碼,並會看到檔案的傳輸狀態

3. 可至連線到伺服器的終端確認傳輸成功與否,若能在.ssh資料夾中找到方才傳輸過來的.pub檔案,即為傳輸成功
```
cd .ssh //進入.ssh資料夾
ls //列出資料夾中所有檔案
```

## 5. 授權SSH Key(公鑰)
1. 在連線到伺服器的終端輸入以下指令,以便對剛才傳輸過來的.pub檔案進行授權:
```
cat ~/.ssh/傳輸過來後的名稱.pub >> ~/.ssh/authorized_keys
```
2. 此時列出.ssh資料夾中所有檔案可發現多了一個檔案名為"authorized_keys",可輸入以下指令查看哪些金鑰授權成功:
```
cat ~/.ssh/authorized_keys
```

3. 最後,輸入以下指令,變更檔案權限:
```
chmod 700 ~/.ssh/ //指定只有擁有者可讀寫可執行該目錄
chmod 600 ~/.ssh/* //指定只有擁有者具備讀取和寫入.ssh資料夾下所有檔案的權限
```

## 6. 私鑰轉檔
1. 開啟PuTTYgen,Load前面所產生的私鑰(id_rsa)
:::info
:bulb: **注意**:需先將顯示的檔案類型改為"All Files(\*.*)"才找得到私鑰
:::

2. 選擇"Save private key",並為轉檔後的私鑰取名
:::info
:bulb: **注意**:記得取完名後要在後方加上附檔名.ppk
:::

## 7. 設定PuTTY 連線
1. 開啟PuTTY,左方選擇 Connection>>SSH>>Auth>>Credentials,點擊"Browse..."
2. 選擇方才轉檔後的私鑰(.ppk)

3. 左方選擇Session回到起始畫面,下方Saved Sessions處輸入 **hostname@IP位址** 並儲存,未來雙擊可免重新設定前2步驟,輸入Host Name即可免密碼登入Server

## 8. 成功免密碼登入

## 參考資料
1. [如何更改Linux作業系統的主機名稱(hostname)?](https://magiclen.org/linux-change-hostname/)
2. [SSH Key 教學,讓你免密碼登入主機伺服器!](https://raise-up.com.tw/web-design-news/ssh-key-tutorial.html/)
3. [How To Use SSH on Windows PuTTY - Generate Public/Private Key Pair & File](https://www.bluehost.com/help/article/using-ssh-on-windows-putty)
###### tags: `Linux系統管理` `SSH key` `免密連線`