使用 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:

使用 Xournal 在 PDF 簽名 in openSUSE Leap 15.2 小記

使用 Xournal 在 PDF 簽名 in openSUSE Leap 15.2  小記


OS: openSUSE Leap 15.2


現在因為疫情因素, 很多人都要 Work From Home.

但是有些文件是需要簽名回傳的, 這個時候不想出門列印浪費紙張, 那該怎辦呢?


在 PDF 上面簽名, 目前自己的作法並不是使用電子簽署的方式, 而是比較常見的, 在 PDF 上面加上注釋的方式來進行簽名. 目前我有使用兩種作法, 然後暫時沒有使用自行簽名存檔後去背儲存的方式.



作法 1: 在手機上安裝 Adobe Acrobat 軟體直接用手機簽署


參考 就是教不落的文章


安裝 Adobe Acrobat DC – PDF Reader

就可以在手機進行 PDF 簽署


優點

  • 在手機上就可以進行簽署, 筆觸可以比較像自己簽名


缺點

  • 要註冊 Adobe ID 才可以使用


至於簽名能夠存在雲端上面, 我個人不知道是優點還是缺點, 反正我是沒有存.



作法 2: 安裝 Xournal 來進行 PDF 簽名


剛剛是在手機上面, 然後要註冊 Adobe ID 才能進行

那如果是在 PC 上面呢, 參考網路的資訊, 我後來選擇使用 Xournal 這個軟體


使用 zypper 安裝 xournal


# zypper  install  xournal


Loading repository data...

Reading installed packages...

Resolving package dependencies...


The following 4 NEW packages are going to be installed:

  libart_lgpl_2-2 libgnomecanvas-2-0 libgnomecanvas-lang xournal


The following recommended package was automatically selected:

  libgnomecanvas-lang


4 new packages to install.

Overall download size: 669.5 KiB. Already cached: 0 B. After the operation,

additional 2.0 MiB will be used.

Continue? [y/n/v/...? shows all options] (y):  Y


安裝完成之後在應用程式會看到 Xournal




接下來就試試看進行 PDF 簽名


筆者以 openSUSE 文件為例


下載 openSUSE Leap 15.3 Start Up Guide PDF

在該 PDF 上面按滑鼠右鍵 -- > 以其他應用程式開啟

選取 Xournal 來進行開啟



預設開啟的時候就是畫筆

這個時候就使用畫筆來進行簽名


  • 這個時候大概就會希望有個手寫版 …. 用滑鼠簽名真的很累 QQ



那要如何存檔呢?


只要點選 檔案 -- > 匯出至 PDF

點選 儲存就可以了


優點

  • 在自己的設備上進行, 控管上比較放心, 也不用註冊帳號


缺點

  • 如果沒有手寫版, 用滑鼠簽名有點痛苦



這樣應該可以暫時解決回簽的問題


~ enjoy it


Reference:





使用 Web 報稅 with openSUSE Leap 15.2 小記

使用 Web 報稅 with openSUSE Leap 15.2 小記


OS: openSUSE Leap 15.2


今年雖然因為疫情的關係, 政府有說報稅可以延長一個月, 但是想說在可以報稅繳稅的時間內作, 就先做吧. 軍無糧則散, 該盡的義務還是要盡的.


會想寫這篇部落格的原因是, 政府一直再進步, 從早期的只能用 Windows + 讀卡機 + 自然人憑證, 到後面可以使用 Mac + Windows Player + 讀卡機 + 自然人憑證, 再到 使用  Mac + 健保卡 進行報稅, 今年可以使用 openSUSE 以 Web 方式 + 行動電話認証 + 健保卡卡號, 真的很有感覺.


因為報稅一年一次, 所以要寫一下小記, 才會記得去年自己如何報稅 :)


今年報稅方式可以簡單分

  • Windows 離線版

  • 手機報稅

  • Web 線上版



官方網站  https://tax.nat.gov.tw/alltax.html?id=1

手機報稅的 Youtube 影片也很建議觀看


手機報稅與電腦報稅, 官方也有很清楚的圖示說明



我因為有扶養親屬的關係, 所以是採用 Web 線上版

Web 線上版 URL:  https://efile.tax.nat.gov.tw/irxw/index.jsp


進入之後會要求選取驗證方式

我這邊是選  行動電話認証

  • 需要準備的是

  • 納稅義務人的行動電話號碼, 業者

  • 納稅義務人的健保卡卡號




點選行動電話認証下方的 用這個方式身份認証


接下來會檢查相關環境

通過測試, 點選 系統檢查完畢, 前往身份驗證畫面



接下來輸入相關資訊

點選 執行身份驗證




接下來網頁上會出現 QRCode



請確認行動電話已經關閉 WIFI , 然後進行掃描


手機上會出現相關訊息

勾選我同意之後, 進行驗證



接下來就會進入報稅系統的畫面



進到這邊來, 報稅的方式就以其他系統無異, 那就不贅述了


今年可以直接使用 openSUSE Leap 15.2 用簡單的方式報稅, 真是開心


~ enjoy it


May 22nd, 2021

解決 Google Meet 不能分享螢幕與終端機 with openSUSE Leap 小記

解決 Google Meet 不能分享螢幕與終端機 with openSUSE Leap 小記 


OS: openSUSE Leap 15.2 


最近因為居家上班, 所以使用視訊開會的需求增加了

之前在 Google Hangout 時代就有發現有一陣子, 分享螢幕的時候只能分享視窗, 但是不能分享整個螢幕 ( 出現全黑視窗 ).


像是這樣

圖片取自 superuser.com討論


之前沒有放在心上是因為

  • 使用頻率不高

  • Zoom 沒有這個問題


但是最近因為會頻繁的使用 Google Meet 所以就在網路上找相關解決方案

找到的結論是: Wayland 的問題, 只要將 Display Server 從 Wayland 換回 Xorg 就可以解決


有關於 Wayland vs Xorg 也有找到一篇文章看


換回 Xorg 的方式很簡單, 在登入畫面, 輸入密碼的時候, 點選設定的齒輪圖示

點選 GNOME on Xorg 即可


圖片取自 superuser.com討論


換成 Xorg 之後, 馬上感受到的改變是, 輸入法突然從 ibus 換回 gcin :)

其他的部份, 目前還好


接下來驗證 Google Meet 螢幕分享



一切順利

I love Xorg with openSUSE 


~ enjoy it






Reference



使用 nmcli 設定 Network Manager PPPoE 撥接光世代固定 IP 小記

使用 nmcli 設定 Network Manager PPPoE 撥接光世代固定 IP 小記


OS: openSUSE Leap 15.2


情境:

  • 由於 COVID 19 的關係, 有些公司開始有機會居家上班是分區上班

  • 家中的環境是使用 4G + 路由器的方式進行上網, 最近因為訊號與居家上班的關係, 跑去申請中華電信的光世代 100M / 40M.

  • 因不想頻繁更動防火牆規則, 故想要申請固定 IP 來簡化流程與增進效率


這篇部落格就是紀錄申請固定 IP 與相關設定


==== 申請光世代固定 IP ====


到中華電信官網 https://www.cht.com.tw

點選 家庭上網與通訊 -- > 點選 固定 IP 申請


登入帳號



  • 這邊輸入申請時候給的小卡片上面的帳號與密碼


點選 一個固定IP + 七個動態 IP

輸入 聯絡 Email

勾選 我已閱讀並同意

點選 送出申請

  • 聯絡Email 很重要, 以後有變動與相關資訊都會用這個 email 通知


這樣就設定完成 :)


==== 撥接固定 IP  ====


但是如果你到 https://www.whatismyip.com/ 去觀察你的對外 IP

你會發現, 這個時候的對外 IP, 並不是配發的固定 IP

  • 因為中華電信要使用 xxxxxxxx@ip.hinet.net 撥接上去的才是固定 IP

  • 一開始透過設備無線 / 有線所取得的 IP 都是 7 個動態 IP 的其中一個


所以如果要使用配發的固定 IP, 那就要

  • 使用有線連線光世代設備

  • 使用 PPPoE 配合 xxxxxxxx@ip.hinet.net 撥接才能取得 IP


網路上搜尋到很多文章都是用 pppoeconf 或是 rp-pppoe 方式來撥接, 但是因為我的環境是用 NetworkManager + GNOME 介面, 所以我想要在現有介面處理掉, 找了一下網路上面的做法  

找到了使用 nmcli (command-line tool for controlling NetworkManager) 方式來解決


首先可以用 nmcli 指令觀察連線

# nmcli  connection  show


預設在 NetworkManager 沒有看到  PPPoe 相關設定

使用 nmcli 指令建立一個 pppoe 連線, 名稱爲 hinet, 並進入設定


# nmcli  connection  edit  type  pppoe  con-name  "hinet"


===| nmcli interactive connection editor |===


Adding a new 'pppoe' connection


Type 'help' or '?' for available commands.

Type 'print' to show all the connection properties.

Type 'describe [<setting>.<prop>]' for detailed property description.


You may edit the following settings: connection, pppoe, 802-3-ethernet (ethernet), ppp, 802-1x, ethtool, match, ipv4, ipv6, tc, proxy


設定帳號名稱

nmcli>  set  pppoe.username  25677291@ip.hinet.net

儲存設定

nmcli>  save

Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.

Do you still want to save? (yes/no) [yes] yes

Connection 'hinet' (8d2d2b0f-2ab7-4302-9428-eb8a1adc1d41) successfully saved.

離開設定

nmcli>  quit


點選GNOME 介面右上角, 有線設定值



點選 hinet 設定按鈕



  • 這個時候會被要求輸入管理者帳號確認權限


選取有線網路的介面 (Parent interface) 以我這邊是 eth0

這個使用可以觀察到剛剛設定的 Username 應該已經填入 (xxxxxxxx@ip.hinet.net)

輸入密碼 -- >  點選 儲存


把有線網路停用, 應該 hinet 就會自動撥接上去了


  • 相關設定檔儲存在 /etc/NetworkManager/system-connections 目錄下, 也可以觀察


接下來就是觀察取得的 IP 是否為配發的固定 IP ( 還會帶 IPv6 )

  • 可以用 # ip address show  觀察 ppp0 介面


這樣IP 就固定下來了 :)

又前進一小步


~ enjoy it


May 13th, 2021

三大雲平台工具容器升級小記 - ansible 2.10.9 / AWS Cli 2.2.4 / gcloud 340.0

三大雲平台工具容器升級小記 - ansible 2.10.9 / AWS Cli 2.2.4 / gcloud 340.0


OS: container with openSUSE Leap 15.2



上次升級是 2020/11/29 , 這次會來升級的原因是 


然後也同步紀錄一下目前 Azure CloudShell 上面的 Ansible 資訊

  • Ansible: 2.10.2 / python 3.7.3 (已經升級到 python 3)




先整理結果


升級前

OS: openSUSE Leap 15.2

awscli:  aws-cli/2.1.4 Python/3.7.3

gcloud: Google Cloud SDK 319.0.0

azure-cli: 2.15.1 (目前有 bug)

ansible: 2.10.3


升級後

OS: openSUSE Leap 15.2

awscli:  aws-cli/2.2.4 Python/3.8.8

gcloud: Google Cloud SDK 340.0.0

azure-cli: 2.23.0 (目前有 bug)

ansible: 2.10.9


AWS CLI v2 安裝文件


GCP Cloud SDK 版本




這次的做法還是會透過 docker build 指令來進行

  • 我有比較過 docker build 以及使用現有的 docker image 修改後再使用 docker commit 建立的 image 大小還是很有差異的


Dockerfile 的部分我是拿之前 openSUSE Leap 15.2 來修改


修改細節

  • Update time

  • Google SDK 版本還有下載的檔案路徑以及檔案名稱



列出 diff 的結果給大家參考



> diff opensuseLeap152_ansible_20210513_Dockerfile  opensuseLeap151_ansible_20201129_Dockerfile 



6c6

< # update time: 20210513

---

> # update: 20201129

75c75

< # Install google cloud SDK 340.0.0

---

> # Install google cloud SDK 319.0.0

77,78c77,78

< RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-340.0.0-linux-x86_64.tar.gz && \

<   tar zxvf google-cloud-sdk-340.0.0-linux-x86_64.tar.gz && \

---

> RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-319.0.0-linux-x86_64.tar.gz && \

>   tar zxvf google-cloud-sdk-319.0.0-linux-x86_64.tar.gz && \




Dockerfile 內容如下




# openSUSE Leap 15.2 with ansible, azure-cli, aws cli, gcloud

FROM opensuse/leap:15.2


# Author

# MAINTAINER 已經棄用, 之後要使用 LABEL 方式

# update time: 20210513

LABEL maintainer="sakana@cycu.org.tw"


# Set LANG for UTF-8 - for Chinese

ENV LANG C.UTF-8


# Install python3-pip, upgrade pip, ansible, boto, boto3

RUN zypper install -y python3-pip && \

  pip3 install --upgrade pip && \

  pip3 install ansible && \

  pip3 install boto boto3


# Install openssh, set ls alias

RUN zypper install -y openssh

RUN echo "alias ls='ls --color=tty'" >> /root/.bashrc


# Install wget, download azure_rm.py, set permission

RUN zypper install -y wget


# azure_rm.py no need to download 

# Starting with Ansible 2.8, Ansible provides an Azure dynamic-inventory plug-in

# https://docs.ansible.com/ansible/latest/plugins/inventory/azure_rm.html

# old azure_rm.py URL https://raw.githubusercontent.com/ansible/ansible/devel/contrib/inventory/azure_rm.py


# Create working directory in /root

RUN mkdir /root/.azure && \

  mkdir /root/.aws && \

  mkdir /root/playbook && \

  mkdir -p /root/.config/gcloud && \

  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/ansible.cfg && \

  mv /ansible.cfg /root && \

  wget https://raw.githubusercontent.com/sakanamax/LearnAnsible/master/template/hosts && \

  mv /hosts /root


#### Azure #### 

# Install azure-cli

# 2020/11/29 Still have az login issue in Github https://github.com/Azure/azure-cli/issues/13209

RUN zypper install -y curl && \

  rpm --import https://packages.microsoft.com/keys/microsoft.asc && \

  zypper addrepo --name 'Azure CLI' --check https://packages.microsoft.com/yumrepos/azure-cli azure-cli && \

  zypper install --from azure-cli -y azure-cli


# Install Ansible azure module

# After ansible 2.10, some module move to ansible collect, change install method

RUN zypper install -y curl && \ 

  curl -O https://raw.githubusercontent.com/ansible-collections/azure/dev/requirements-azure.txt && \

  pip3 install -r requirements-azure.txt && \

  rm -f requirements-azure.txt && \

  ansible-galaxy collection install azure.azcollection




#install vim tar gzip jq unzip less bind-utils iputils groff

RUN zypper install -y vim tar gzip jq unzip less bind-utils iputils groff

RUN echo "set encoding=utf8" > /root/.vimrc


#### AWS ####

# Install awscli v1

#RUN pip3 install awscli

#RUN echo "source /usr/bin/aws_bash_completer" >> /root/.bashrc


# Install awscli v2

RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && \

  unzip awscliv2.zip && \

  /aws/install

RUN echo "complete -C '/usr/local/bin/aws_completer' aws" >> /root/.bashrc


#### GCP ####

# Install google cloud SDK 340.0.0

ENV CLOUDSDK_CORE_DISABLE_PROMPTS 1

RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-340.0.0-linux-x86_64.tar.gz && \

  tar zxvf google-cloud-sdk-340.0.0-linux-x86_64.tar.gz && \

  /google-cloud-sdk/install.sh && \

  echo "if [ -f '/google-cloud-sdk/path.bash.inc' ]; then . '/google-cloud-sdk/path.bash.inc'; fi" >> /root/.bashrc && \

  echo "if [ -f '/google-cloud-sdk/completion.bash.inc' ]; then . '/google-cloud-sdk/completion.bash.inc'; fi" >> /root/.bashrc




使用 docker build 指令建立 image


> docker build  -t  sakana/ansible_opensuse152:20210513  -f  ./opensuseLeap152_ansible_20210513_Dockerfile   .


  • 使用 -f 指定 Dockerfile 名稱

  • 最後是 ” . “ 目前的目錄



測試 container image


> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse152:20210513  /bin/bash


測試結果 OK, 建立  tag


  • 這邊目前因為 openSUSE Leap 15 使用舊的 azure cli 以及相依性, 所以現在 az 指令會有問題, 已經 update issue 以及花了很多時間調整, 目前還是要等 openSUSE and Azure 看是否會有後續更新

  • 但是 ansible with azure 沒有問題, 所以目前 az 指令可能會暫時透過 Azure cloud shell




觀察資訊

> docker  images


REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE

sakana/ansible_opensuse152   20210513            c69c2e1c6e9e        13 minutes ago      2.45GB

opensuse/leap                15.2                573008f769b5        20 hours ago        106MB

sakana/ansible_opensuse152   latest              9f8d6b777cc9        2 weeks ago         1.82GB





建立 tag 

> docker  tag  c69c2e1c6e9e  sakana/ansible_opensuse152:latest


登入 docker

> docker  login


上傳 image

> docker  push  sakana/ansible_opensuse152:20210513


> docker  push  sakana/ansible_opensuse152:latest


完工, 以後使用就用


> docker  run  -v  ~/.aws:/root/.aws  -v  ~/.azure:/root/.azure  -v ~/.config/gcloud:/root/.config/gcloud  -it  sakana/ansible_opensuse152  /bin/bash



額外小記: 又碰到 Azure 的認證資訊已經超過一年了, 參考之前自己的筆記

  • http://sakananote2.blogspot.com/2020/05/azure-dynamic-inventory-with-ansible.html

  • 使用 az  ad  sp list  --all --output table | grep azure-cli 找出舊的認證, 

  • 刪除他 ex: # az  ad  sp delete --id d06f8905-ad21-425b-9da5-3e0bcf22a853 

  • 然後建立新的認證 ex: # az  ad  sp  create-for-rbac --query  '{"client_id": appId, "secret": password, "tenant": tenant}'

  • 查詢 subscription_id, ex: # az  account  show  --query  "{ subscription_id: id }"

  • 更新  ~/.azure/credentials



~ enjoy it


Reference:

Apr 5th, 2021

AWS CodeCommit 使用小記

AWS CodeCommit 使用小記


OS: openSUSE Leap 15.2

git: 2.26.2


最近因為使用 GitLab 的關係, 所以有些資料原本是使用 share folder 的方式, 現在也會考慮使用 git 的方式儲存.


今天來寫 AWS CodeCommit 的使用紀錄

目前使用的方式是參考


連接 AWS CodeCommit 有很多方式, 我是採取 SSH Key 的方式, 網路上有人反應這樣的做法比較穩妥, 比較不會出現奇怪的現象.


實作的方式


接下來就讓我們開始吧


首先登入 AWS IAM console

點選左方的 Groups -- > 點選 Create New Group

群組名稱輸入: CodeCommitPowerUser  -- > 點選 Next Step



在 Attach Policy 頁面

搜尋 CodeCommit -- > 勾選 AWSCodeCommitPowerUser

點選 Next Step


檢閱相關設定

點選 Create Group



接下來加入使用者

點選剛剛建立的 CodeCommitPowerUser 群組

在 Users 頁籤 -- > 點選 Add Users to Group



勾選要加入的使用者 -- > Add Users


接下來要將使用者的 SSH Public Key 上傳到 IAM 使用者的 SSH Keys for AWS CodeCommit


點選 IAM console 左方的 Users

點選 剛剛被加入的使用者

點選 Security credentials 頁籤


點選 Upload SSH public key 按鈕



將 SSH 公鑰貼上

點選 Upload SSH public Key





將 SSH key ID 記錄下來, 等等這個 ID 就是 SSH User ID




再來建立 ~/.ssh/config

使用自己習慣的編輯器 建立 ~/.ssh/config 檔案, 內容如下



  • User 後面那串字元, 請換成之前的 SSH key ID

  • IdentityFile 請換成 自己的 SSH Private Key, 如 id_rsa


將 ~/.ssh/config 檔案設定相關權限


> chmod  600  ~/.ssh/config


最後階段, 建立 CodeCommit Repository, 使用 git clone 測試操作


登入 AWS CodeCommit 主控台 https://console.aws.amazon.com/codesuite/codecommit/home


CodeCommit 也是 Region 服務, 所以可以先選取你要建立的 Region, 我這邊的例子是使用 Ohio (  us-east-2 )


點選 Create repository


輸入 儲存庫名稱

點選 Create




建立完成之後, 其實會有不同的頁籤來說明如何連接

點選 SSH 頁籤

展開你要的 OS 選項, 我是用 openSUSE Leap 15.2 , 所以展開 Linux


點選 Step 4 的 Copy

他會複製 git clone ssh 的指令



接下來進行 git clone 的測試


切換到要進行 git clone 的目錄


貼上與執行剛剛複製的 git clone 指令


> git  clone  ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/test20210405


正複製到 'test20210405'...

warning: 您似乎複製了一個空版本庫。


進入到相關目錄

> cd   test20210405/


接下來嘗試建立檔案進行 commit 測試


> echo  "CodeCommit Test"  >  README.md

> git  add  .

> git  commit  -m  "20210405"


[master (根提交) 6381ea1] 20210405

 1 file changed, 1 insertion(+)

 create mode 100644 README.md


> git  push  -u  origin  master


Warning: Permanently added the RSA host key for IP address '52.95.17.51' to the list of known hosts.

枚舉物件: 3, 完成.

物件計數中: 100% (3/3), 完成.

寫入物件中: 100% (3/3), 227 位元組 | 227.00 KiB/s, 完成.

總共 3 (差異 0),復用 0 (差異 0),重用包 0

To ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/test20210405

 * [new branch]      master -> master

分支 'master' 設定為追蹤來自 'origin' 的遠端分支 'master'。



回到  AWS CodeCommit 觀察



這樣又多了一個 git 存儲的去處, 也多向 AWS 服務邁向一步



~ enjoy it



Reference:





Rancher 2.5.7 with container in Azure 安裝小記

Rancher 2.5.7  with container in Azure 安裝小記


OS: openSUSE Leap 15.2 in Azure

Rancher: 2.5.7


今年又開始重拾 Kubernetes 的研讀, 之前就有注意 Rancher 的相關消息, 在 SUSE 正式併購 Rancher 之後, 就有打算找時間看看他


目前的想法就是研讀 K8S 的時候, 搭配他來看看, 因為是嘗試, 就從 single node with container 方式開始


安裝需求

https://rancher.com/docs/rancher/v2.x/en/installation/requirements/

  • 以  single-node 方式, 規格是 1 vCPU 4GB RAM / 2 vCPU 8GB RAM, 換成 Azure Virtual Machine 的 Size 比較節費的就是 Standard_B2ms



使用 SSH 連入建立的 openSUSE Leap 15.2 in Azure


切換身份爲 root

>  sudo  su  -


啟動 docker 服務, 並預設啟動


# systemctl  start  docker

# systemctl  enable  docker


叄考官方文件 啟用 rancher container



啟動 Rancher


#docker  run  -d  --restart=unless-stopped   -p  80:80  -p  443:443   --privileged   rancher/rancher:latest


然後在 Azure 的 網路安全性群組 開放 Port 443 與 Port 80


開啟瀏覽器 https://YOUR_IP:443

會看到歡迎畫面


  • 輸入管理者 admin 的密碼

  • 勾選同意協定 -- > Continue



設定 Rancher 的 URL



輸入相關 IP 或是 URL 後 -- > Save URL


接下來會看到歡迎畫面與 Rancher 2.5 的介紹視窗



  • 這樣可以清楚的知道目前使用的是 Rancher 2.5 (笑)



觀察一下目前的歡迎畫面



右下角可以調整介面的語系, 可以調整成自己想要的語系




切換後的樣貌



我們來嘗試透過 Rancher 來建立  AKS Cluster 吧


點選 添加叢集


看的出來有支援很多種型態


這邊我點選 Azure AKS



接下來有看到設定畫面



在新增 Cluster 之前要先處理  Azure 上面 Service principals 的部分


我是使用 Azure 的 Cloud Shell 來進行


建議建立之前可以先使用下列指定觀察目前的 Service principals


$ az  ad  sp  list  --all  --output  table


根據官方文件建立 Service Principal

$ az ad sp create-for-rbac --skip-assignment --name testRancherServicePrincipal



  • 這樣的方式顯示出來的欄位爲 appID / displayName / name / password / tenant

    • 可是其實我們只需要的是 Subscription ID / Client ID / Tenant ID / Client Secret

    • 補充: Client ID 就是 AppID, Client Secret 就是 password, 所以只差了 Subscription ID 


所以決定把剛剛那個 Service Principal 先刪除了 ( 順便複習一下之前的 )


使用剛剛的指令加上 grep Rancher 找出剛剛的 Service Principal

$ az  ad  sp  list  --all  --output  table |  grep Rancher

 

參考之前自己的文章


刪除剛剛建立的 Service Principal


$ az  ad  sp  delete --id  8faa88b0-a540-4d8c-a790-1ca6a0522dsd


  • 8faa88b0-a540-4d8c-a790-1ca6a0522dsd 爲剛剛建立的 AppId, 可以看第三欄位


建立 Service Principal


$ az  ad  sp create-for-rbac  --name  testRancherServicePrincipal-20210404 --query   '{"client_id": appId, "secret": password, "Tenant_id": tenant}'



  • 這邊有個雷點, 不可以加上 --skip-assignment  否則會遇到權限不足的問題, 會遇到錯誤訊息 access was recently granted, please refresh your credentials

  • 這次的指令相比於之前自己文章的指令, 有加上 --name 的選項在裡面, 如果沒有使用 --name 指定名稱, 預設會是 azure-cli-20xx-xx-xx-xx-xx-xx, 這樣的好處是可以知道建立時間, 所以我的名稱也有加入時間進去, 以免以後不知道那個 SP 過期

  • 加上 --query 的方式, 輸出自己要的資訊


接下來取得 Subscription ID

使用 az account 指令取得


$ az  account  show  --query  "{ subscription_id: id }"

{

 "subscription_id": "6a2bdf3b-XXXX-XXXX-XXXX-3371d3401feb"

}


好的, 原料備齊, 回到 Rancher 填入資訊

點選 Next: Authenticate & configure nodes


  • 再次提醒自己剛剛在建立 az ad sp 的時候不可以加上 --skip-assignment  否則會遇到權限不足的問題



驗證通過之後, 就是設定 Kubernetes 相關選項




  • 版本我用他預設給的 1.19.7




  • 填入  Resource Group 名稱

  • 設定要使用的 VM 規格, 主機數量

  • 貼上 SSH 公鑰


點選 創建


這個時候可以觀察相關狀態



建立需要一點時間, 可以同步觀察 Azure 上面的資源


建立完成, 可以在 Rancher 與 Azure 上面同步觀察



  • 可以直接在網頁上面執行 kubectl


也可以下載 Kubeconfig


Azure 這邊則可以觀察到

  • 有建立相關的 AKS 服務以及 Resource Group for AKS



最後來測試一個猛的, 刪除 cluster

點選剛剛建立的 Cluster 點選刪除



觀察了一下 Azure 那邊, Rancher 也很盡責的刪除剛剛建立的 AKS 與相關資源



小結一下: 目前看起來 Rancher UI 是很方便的, 所以日後可以多嘗試一下他的相關功能

也算是跨出 Rancher 的一小步了


~ enjoy it




Reference:





openSUSE Leap 15.2 以非互動方式註冊 GitLab runner with docker executor in Azure 小記

openSUSE Leap 15.2 以非互動方式註冊 GitLab runner with docker executor in Azure 小記


OS: openSUSE Leap 15.2 in Azure

GitLab: 使用 gitlab.com


上次的文章使用互動的方式註冊 gitlab-runner 然後是用 shell executor


今天要來實作以非互動的方式註冊 gitlab-runner 然後採取 docker 來當 executor


實作前提

  • 在 gitlab.com 有帳號 ( 免費的就可以, 有付錢的功能更多  )


確認自己的 GitLab project / Group CI / CD Runner 設定與 Token 

  • 在 GitLab.com 登入自己帳號

  • 在 Project / Group 內 的 Settings -- > CI / CD

  • 展開 Runners 就會看到 Token




接下來開始建立實驗


建立 openSUSE Leap 15.2 in Azure

  • 我是用  Cloud Shell in VS code 然後透過 ansible 建立



使用 zypper 新增 gitlab 的 repo

  • 語法  zypper ar -f <URL> <alias>


# zypper  ar  -f  https://download.opensuse.org/repositories/openSUSE:/infrastructure:/gitlab/openSUSE_Leap_15.2  gitlab


觀察相關資訊

# zypper  lr


Repository priorities are without effect. All enabled repositories share the same priority.


# | Alias               | Name                        | Enabled | GPG Check | Refresh

--+---------------------+-----------------------------+---------+-----------+--------

1 | gitlab              | gitlab                      | Yes     | ( p) Yes  | Yes

2 | repo-debug          | Debug Repository            | Yes     | ( p) Yes  | Yes

3 | repo-debug-update   | Update Repository (Debug)   | Yes     | ( p) Yes  | Yes

4 | repo-non-oss        | Non-OSS Repository          | Yes     | ( p) Yes  | Yes

5 | repo-oss            | Main Repository             | Yes     | ( p) Yes  | Yes

6 | repo-source         | Source Repository           | Yes     | ( p) Yes  | Yes

7 | repo-update         | Main Update Repository      | Yes     | ( p) Yes  | Yes

8 | repo-update-non-oss | Update Repository (Non-Oss) | Yes     | ( p) Yes  | Yes


匯入  GPG Key 與 refresh repo

# zypper  --gpg-auto-import-keys  refresh


安裝 gitlab-runner

# zypper   install  -y  gitlab-runner


啟動 docker 服務

# systemctl  start  docker


設定 docker 開機時啟動

# systemctl  enable  docker


使用 gitlab-runner register 搭配 --non-interactive 方式非互動註冊

# gitlab-runner  register --non-interactive  --url  https://gitlab.com  --registration-token YOUR_TOKEN    --executor  docker --docker-image  opensuse/leap:latest  --name  test-gitlab-runner-docker   --tag-list  "opensuse-docker"


  • --url 與 --registration-token 請換成自己要註冊的 Server 與 token

  • --executor 指定 docker 方式 並指定預設的 docker image 爲 opensuse/leap:latest

  • --name 指定名稱

  • --tag-list 指定 tag


觀察相關資訊

# cat   /etc/gitlab-runner/config.toml


concurrent = 1

check_interval = 0


[session_server]

  session_timeout = 1800


[[runners]]

  name = "test-gitlab-runner-docker"

  url = "https://gitlab.com"

  token = "5kYxjqvGPPy63Vus_W66K"

  executor = "docker"

  [runners.custom_build_dir]

  [runners.cache]

    [runners.cache.s3]

    [runners.cache.gcs]

  [runners.docker]

    tls_verify = false

    image = "opensuse/leap:latest"

    privileged = false

    disable_entrypoint_overwrite = false

    oom_kill_disable = false

    disable_cache = false

    volumes = ["/cache"]

    pull_policy = "always"

    shm_size = 0


  • 這邊的 token 是 runner 的 token


啟動 gitlab-runner

# gitlab-runner  start


觀察相關資訊

# gitlab-runner  status


也可以到 Gitlab 上面觀察



又前進一步

下次預計來弄 ansible playbook :)


~ enjoy it


Reference:



openSUSE Leap 15.2 as GitLab runner in Azure 小記

openSUSE Leap 15.2 as GitLab runner in Azure 小記


OS: openSUSE Leap 15.2 in Azure

GitLab: 使用 gitlab.com


最近開始學 GitLab

先感謝 陳正瑋 的鐵人賽文章以及 和艦長一起30天玩轉 GitLab 書籍

入門多了很多的資訊


今天要來寫的是把 openSUSE Leap 15.2 當成 gitlab runner 來執行

爲何要寫這篇呢? 當然是因為官方的文件上沒有列出 openSUSE 安裝方式 :)


那就只好自己嘗試, 然後記錄下來了 (攤手)


實作前提

  • 在 gitlab.com 有帳號 ( 免費的就可以, 有付錢的功能更多  )


確認自己的 GitLab project / Group CI / CD Runner 設定與 Token 

  • 在 GitLab.com 登入自己帳號

  • 在 Project / Group 內 的 Settings -- > CI / CD

  • 展開 Runners 就會看到 Token




接下來開始建立實驗


建立 openSUSE Leap 15.2 in Azure

  • 我是用  Cloud Shell in VS code 然後透過 ansible 建立的 ~ 開心



回到 gitlab 身上來

如果在 software.opensuse.org 上面搜尋 gitlab-runner



  • 這邊其實就有看到實驗性套件了


使用 ssh 連入剛剛的 openSUSE Leap 15.2 in Azure


使用 yast  repositories 新增套件庫


#yast  repositories


新增套件庫 (Alt + A)

方式選取 指定 URL



點選下一步 (Alt + N)

套件庫的名稱可以自行取

URL 的部分指定 



點選下一步 (Alt + N)

有遇到 GnuPG Key 可以 Trust 一下



確認 GitLab 套件庫有被加入

點選 OK (Alt + O)



接下來新增相關套件


# zypper   install  gitlab-runner


Loading repository data...

Reading installed packages...

Resolving package dependencies...


The following 5 NEW packages are going to be installed:

  dash gitlab-common gitlab-runner libruby2_6-2_6 ruby2.6


5 new packages to install.

Overall download size: 12.6 MiB. Already cached: 0 B. After the operation, additional 52.3

MiB will be used.

Continue? [y/n/v/...? shows all options] (y): y



註冊 gitlab-runner


# gitlab-runner  register


輸入 https://gitlab.com

輸入 Gitlab-runner token

輸入 這個 runner 的敘述

輸入 這個 runner 的 tag ( 這個很重要 )

輸入 這個 runner 的 executor ( 一般都是 docker or shell, 請見官方文件 )



啟動 gitlab-runner

# gitlab-runner  start


Runtime platform                                    arch=amd64 os=linux pid=3192 revision=1b659122 version=12.8.0


觀察相關資訊

# gitlab-runner  status


Runtime platform                                    arch=amd64 os=linux pid=3210 revision=1b659122 version=12.8.0

gitlab-runner: Service is running!


Notes:

  • Runner 的 config 會存放在 /etc/gitlab-runner/config.toml

  • 要成為 gitlab-runner 也要安裝 git 不然執行會出現錯誤

  • 執行的時候相關工作目錄會在 /srv/gitlab-runner/builds/GITLAB-RUNNER-TOKEN/ 下


在 GitLab.com 上面確認 runner 有設定成功



找時間要看的文件

Disable SKEL 說明

https://docs.gitlab.com/runner/install/linux-repository.html#disable-skel


Gitlab runner 安裝說明

https://docs.gitlab.com/runner/install/linux-repository.html



這樣算是又向 GitLab 前進一步了

~ enjoy it



Reference: