星期日, 6月 27, 2021

使用 ssh-agent 搭配 Preemptible GCE 暫時連線只有內部IP GCE 小記

使用 ssh-agent 搭配 Preemptible GCE 暫時連線只有內部IP GCE 小記


OS: openSUSE Leap 15.2

gcloud: 340.0.0



WFH 期間, 有時候可能要臨時連線雲端上面的主機, 但是有些專案的主機未必有對外 IP, 連線可能的方式有

  • 透過 VPN 進行連接

  • 使用 Bastion host 方式 來進行連接


今天要實作的就是以 Bastion host 方式( 使用 Preemptible GCE ) 搭配 ssh-agent 來進行連線


首先先來使用 gcloud 指令建立測試的 內部 GCE


# gcloud  compute  instances  create  --zone  asia-east1-b  --machine-type  n1-standard-1  --image-project  opensuse-cloud  --image-family  opensuse-leap  --subnet  sakana-test-10-12-53  --boot-disk-size  30  --boot-disk-device-name  sakana-disk  --boot-disk-type  pd-standard  --scopes  service-control,service-management,storage-rw,bigquery,logging-write,monitoring-write,trace   test2021062601 --no-address  --project  sakanatest


  • 這邊使用 --no-address 的方式, 告訴 gcloud 不要建立外部 IP

  • 這邊我是指定在某一個 subnet



再來建立要來連線的 Bastion Host, ( 使用 Preemptible GCE, 當然也是 openSUSE Leap )


# gcloud compute instances  create --maintenance-policy=TERMINATE  --preemptible --zone  asia-east1-b  --machine-type  n1-standard-1  --image-project  opensuse-cloud --image-family  opensuse-leap --subnet  sakana-test-10-12-53 --boot-disk-size  30  --boot-disk-device-name  sakana-disk --boot-disk-type  pd-standard  --scopes  service-control,service-management,storage-rw,bigquery,logging-write,monitoring-write,trace  test2021062602  --project  sakanatest


  • 使用 Preemptible 的原因是因為, 這台 VM 最多不會超過 24 小時且價格相對於正常的 GCE, 最多可以節省 80 %, 可以參考官網 https://cloud.google.com/preemptible-vms

  • 要使用 Preemptible 會同時使用 --maintenance-policy=TERMINATE  --preemptible

  • 機器類型可以使用客製化的規格, 使用更小的會更省錢 :p

  • Bastion Host 請自行設定只能從家中的固定 IP 進行連線


接下來就是家中主機端這邊


作法上使用 ssh-agent 搭配 Forwarding 功能, 先連到 Bastion Host, 再經由 Bastion Host 連線到內部主機

  • 好處是 ssh-agent 搭配 forwarding 功能可以讓遠端的機器, 在不透過網路傳送金鑰的狀況下, 跟自己的主機進行驗證, 很適合有防火牆的狀況. 也就是不用把金鑰存放到堡壘機或是跳板機上 :)


參考網路上找到的文章


首先觀察機器上面有沒有啟用 ssh-agent


可以使用 ssh-agent -s 觀察

> ssh-agent  -s


SSH_AUTH_SOCK=/tmp/ssh-2OKjHwAUgnXd/agent.8965; export SSH_AUTH_SOCK;

SSH_AGENT_PID=8966; export SSH_AGENT_PID;

echo Agent pid 8966;


如果 ssh-agent 沒有啟動可以參考上述的文章使用

> eval  $(ssh-agent)


eval 用法可參考鳥哥 http://linux.vbird.org/linux_basic/0320bash/0320bash.php


要知道目前 ssh-agent 有哪些 Key, 可以使用

  • > ssh-add  -l

  • > ssh-add  -L


使用 ssh-add 指定加入私鑰

>  ssh-add  ~/.ssh/YOUR_PRIVATE_KEY


  • 這邊請對應要連線的私鑰檔案位置, 例如 ~/.ssh/id_rsa


接下來就是在使用 SSH 指令的時候加上 -A 參數即可


> ssh  -A  -l  sakana  34.81.6.152


openSUSE Leap 15.2 x86_64 (64-bit)


As "root" use the:

- zypper command for package management

- yast command for configuration management


Have a lot of fun…

sakana@test2021062602:~>


  • 使用 -A 進行 Forwarding

  • 使用者名稱請對應到金鑰的使用者

  • 後面請對應到 Bastion Host 對外 IP


目前已經在 Bastion Host, 接下來嘗試連線到內部主機, ssh 後面接對方內部 IP


> ssh  -l  sakana  10.12.53.32


openSUSE Leap 15.2 x86_64 (64-bit)


As "root" use the:

- zypper command for package management

- yast command for configuration management


Have a lot of fun...

sakana@test2021062601:~>


搞定收工

先紀錄下來, 以免之後自己又忘記



Notes: 

之前有在 Cloud Shell 以及主機使用過比較沒常用的 IAP, 但是沒有成功, 就沒有花時間去研究他


# gcloud beta compute ssh --zone "asia-east1-b" "test2021062601"  --tunnel-through-iap --project "sakanatest"


ERROR: (gcloud.beta.compute.start-iap-tunnel) Error while connecting [4003: 'failed to connect to backend']. (Failed to connect to port 22)


另外如果要刪除 ssh-agent 的 Key, 可以使用 

  • ssh-add -D 刪除所有的 Key

  • ssh-add -d 刪除指定的 Key



~ enjoy it



Reference:

沒有留言: