# [GCP] 遇到 permission denied (publickey) 怎麼辦?

https://www.paulgifford.co/googlecloudplatform

https://www.paulgifford.co/googlecloudplatform

最近因為專案需求,在 GCP 上建立了一個 VM instance。

眾所周知,要連進 GCP 的 VM instance 通常都是使用 ssh 搭配 id_rsa key (不知道何謂 id_rsa 若如何使用 id_rsa 進行 ssh 可以 google 一下,這邊暫不贅述)

但是某日在需要 ssh 時,卻跳出了

permission denied (publickey)

心中只有一個字:「e04 咧!! ! 」「到底發生什麼事情了…」

從這短短的訊息中透露出幾條線索

  1. 權限不足
  2. 為什麼權限不足? 因為 public key 不對。

但是為什麼 public key 會不對?通常 key 這種東西,設過一次之後就不會再變更的,基本上不可能會出錯。

所以可能的原因只有幾點:

  1. 對應此 public key 的 private key 遺失或是失效了。
  2. GCP 上搞錯使用者了 (這機率實在很低)

所以我重新開始釐清。

第一點:檢查 id_rsa 是否存在且內容看起來是否正常。

$ ls ~/.ssh/
id_rsa id_rsa.pub
$ cat ~/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----

看起來 private key 格式也沒有怪異。

我決定嘗試將 key 換掉,重創一個使用者。( 創建使用者方法可以查看這篇 )

因此進入 GCP 的操作平台,重新刪除 public key,並且創建新的 key。

結果依然是 permission denied (publickey) …。

此時我已經開始懷疑是 GCP 上同使用者名稱,搞錯 ssh key 的問題了。

因此我使用了 GCP online terminal 進去 GCP ,並且查看 /home 下面目前的使用者有哪些

$ ls /home/

沒有 les 這個使用者…

使用 cat /etc/passwd 查看所有用戶群組

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
# ...
z20240z:x:1003:1004::/home/z20240z:/bin/bash
les.lee:x:1004:1005::/home/les.lee:/bin/bash
les:x:1005:1006::/home/les:/bin/bash

抓到問題了!

VM Instance 中有 les 這名用戶,但是卻沒有對應的 /home 使用者。難怪怎麼改 key 都沒有效果。

知道原因後,簡單地使用 userdel -r <使用者名稱> 將使用者刪除,重新再 GCP 中建立一次帳號。

這次終於可以 ssh 登入了。

終於解決了 「permission denied (publickey)」 的問題了!

# 參考資料

  • Linux 如何查看所有的用户和组信息

Like z20240z's work