# [GCP] 遇到 permission denied (publickey) 怎麼辦?
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 咧!! ! 」「到底發生什麼事情了…」
從這短短的訊息中透露出幾條線索
- 權限不足
- 為什麼權限不足? 因為 public key 不對。
但是為什麼 public key 會不對?通常 key 這種東西,設過一次之後就不會再變更的,基本上不可能會出錯。
所以可能的原因只有幾點:
- 對應此 public key 的 private key 遺失或是失效了。
- 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 如何查看所有的用户和组信息