在 GCP 建立完 VM linux 後 (以 CentOS 7為例)
VM linux 自動新增一個類似你 gmail 的帳號
例如 gmail = [email protected]
VM linux 裡頭就會多一個 helloabc_gmail_com 帳號
家裡的 linux 要 ssh 到 VM
先在 linux 下產生 private、public key:
$ ssh-keygen -f mykey
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): (給這個 private key 一個密碼,可避免這組 private key被偷時的風險)
Enter same passphrase again: (再key一次密碼)
Your identification has been saved in mykey.
Your public key has been saved in mykey.pub.
The key fingerprint is:
73:66:5d:c2:13:5f:7e:64:4a:68:17:0d:36:6f:1a:ab user@uuuuu10
The key's randomart image is:
+--[ RSA 2048]----+
| ..*++|
| .o=.O.|
| .+.= =|
| . + =.|
| S + . o |
| = . |
| E |
| |
| |
+-----------------+
$
完成後會產生兩個檔案:
mykey <-- private key 要自己妥善留存
mykey.pub <-- public key
$ cat mykey.pub 檔案內容 類似 (中間有省略)
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBpNeFZyXXXehjPuGCkEjb/t
laNQt0fztORSCFFQIoKHkQzi7SNhp48kagyOHDNj6mY1LmVZB/sIj2oCa1AFupoFuBYc/XILP
rTX60fIlnBYkHl+6Kq/TX2hzKv user@uuuuu10
把這一段複製下來(注意是長長的一行,無換行字元)
最後面 user@uuuuu10 改為你要登入 VM linux 的帳號 (如 helloabc_gmail_com ) 方便辨識/管理這筆資料
如
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBpNeFZyXXXehjPuGCkEjb/t
laNQt0fztORSCFFQIoKHkQzi7SNhp48kagyOHDNj6mY1LmVZB/sIj2oCa1AFupoFuBYc/XILP
rTX60fIlnBYkHl+6Kq/TX2hzKv helloabc_gmail_com
貼到 VM instance 管理畫面中的 SSH 金鑰欄位,如
google 就會把上面這段 Public Key 寫入到 VM helloabc_gmail_com 帳號:
~helloabc_gmail_com/.ssh/authorized_keys 檔案中
$ ssh -i mykey [email protected]
Enter passphrase for key 'id_rsa': (輸入你 private key 的密碼)
Last login: Fri Mar 6 02:00:09 2015 from 220-135-xxx-xxx.hinet-ip.hinet.net
[helloabc_gmail_com@instance-1 ~]$ (登入成功、不需再輸入 VM helloabc_gmail_com 的密碼)
但這樣無法直接用 ssh [email protected] 登入
會被拒絕,像這樣
$ ssh [email protected]
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
要修改 VM 中的:
[root@instance-1 helloabc_gmail_com]# vi /etc/ssh/sshd_config
PasswordAuthentication yes
改完要 restart sshd
[root@instance-1 helloabc_gmail_com]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
$ ssh [email protected]
Password: (輸入 VM 中 helloabc_gmail_com 的密碼)
Last login: Thu Mar 5 22:58:14 2015 from 220-135-xxx-xxx.hinet-ip.hinet.net
[helloabc_gmail_com@instance-1 ~]$ (登入成功)
PS: helloabc_gmail_com 的密碼
要先在 GCP 後台的 瀏覽器SSH 登入後設定新密碼
(當然,也要順便設定 root 密碼)
windows 下 Putty 的登入方式:
先以 Puttygen 來產生金鑰 private/public key
下載 Putty Key Generator ( puttygen.exe )
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
執行畫面
按下 Generate 後,滑鼠在空白區域隨意移動
ps: SSH-1(RSA) = RSA1 是較舊的系統在用
選 SSH-2RSA = RSA2 ,2048bits 就好
把產生好的金鑰 Public/ Private key 都存下來
#1 儲存 Public Key
畫面中 Key passphrase / Confirm passphrase 兩個欄位要輸入「金鑰密碼」 (自己記好)
畫面中的 Public Key
300多 bytes,類似,複製下來:
ssh-rsa AAAAB3NzaC1yc2EA.................e5BJoFgn52e9VN+9MGipP5w== rsa-key-20150305
改成
ssh-rsa AAAAB3NzaC1yc2EA.................e5BJoFgn52e9VN+9MGipP5w== helloabc_gmail_com
#2 儲存 Private Key(2015-05-22)
helloabc_gmail_com 是 vm linux 上的帳號
特別注意! 在 vm linux 中, helloabc_gmail_com 這個帳號的 home目錄 必須在 /home 底下,
不可在其它 partition 中 否則無法登入(Why ??? 不清楚)
如 /home/helloabc_gmail_com
目錄名稱倒是不一定得跟 帳號名稱相同
按「Save private key」儲存私鑰
記得存檔時要給檔案名稱,例如 private2.ppk
GCP 設定
貼到 GCP後台的 SSH金鑰 中:
google 就會把上面這段 Public Key 寫入到 helloabc_gmail_com 帳號:
~helloabc_gmail_com/.ssh/authorized_keys 檔案中
以 Putty 連進 VM
登入成功。不需輸入 VM中的 linux密碼
===
===$ ssh-keygen -t rsa -f ~/.ssh/id_rsa -C helloabc@dev211 -b 2048
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mic/.ssh/id_rsa.
Your public key has been saved in /home/mic/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:HQkdMlyeaauk9+cmQoIsTsTxV3uhIeMU7XbOKO4GhfA hellofire
The key's randomart image is:
+---[RSA 2048]----+
| .++oo. |
| o + ==o+ |
| . = + = +B. |
| o E + =ooo |
| . . + .S*o |
| o + ooo.o |
| o . o.+o |
| . o.... o |
| o. ..=. |
+----[SHA256]-----+
** -C 後面的文字 只是在 id_rsa.pub 中加上的 "說明文字"
可以另用以上方式產生公私金鑰
好處是下 ssh 指令時,可以少打 -i 參數
例如,原 ssh 命令:
$ ssh -i mykey [email protected]
新的ssh命令 (會自動帶入 .ssh/id_rsa 金鑰)
$ ssh [email protected]
其它參考資料
使用 SSH 連線至您的 Linux 執行個體 -- AWS
https://docs.aws.amazon.com/zh_tw/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html