本日も乙

ただの自己満足な備忘録。

pecoとgcloudコマンドを使って、踏み台経由のGCEインスタンスへのSSHログインを楽にする

以前にAWSにおいて踏み台サーバ経由のEC2インスタンスへのSSHログインをpecoとEC2 APIを使って楽にする方法を書きました。

blog.jicoman.info

GCPではデフォルトでは踏み台サーバなし(パブリックアクセス)でSSHログインできますが、セキュリティ要件として踏み台サーバ経由にしたい場合があると思います。 踏み台サーバやNATに関しては以下の記事をご参考ください。

blog.jicoman.info

GCEインスタンスにログインする場合、以下のようにインスタンス名とゾーン名を調べてコマンドを打つ必要があり、大変面倒です。

$ gcloud compute ssh sample-linux001 --internal-ip --zone asia-northeast1-a

それをちょっとしたbash関数を入れることで楽にしました。

こんな感じになります

gce-ssh

pecoによるインクリメンタルサーチでインスタンスをフィルタして、 gcloud ssh コマンドでログインします。
なお、今回はOSログインでSSHログインしていますが、OSログインを有効化にしなくても動作します。

OSログインについてはこちらをご覧ください。
blog.jicoman.info

pecoのインストール

$ wget https://github.com/peco/peco/releases/download/v0.5.3/peco_linux_amd64.tar.gz
$ tar zxf peco_linux_amd64.tar.gz  && rm -f peco_linux_amd64.tar.gz
$ sudo chown root:root peco_linux_amd64/peco && sudo mv peco_linux_amd64/peco /usr/local/bin/
$ rm -rf peco_linux_amd64
$ peco --version
peco version v0.5.3 (built with go1.10)

bash関数

/etc/bashrc に次のような関数を書きます。自分ひとりだけであれば $HOME/.bashrc でも良いです。

function gce-ssh() {
  local select=$(gcloud compute instances list --filter="STATUS:RUNNING" | /usr/local/bin/peco | awk '{print $1,$2}')
  local host=$(echo $select | awk '{print $1}')
  local zone=$(echo $select | awk '{print $2}')
  gcloud compute ssh ${host} --internal-ip --zone ${zone}
}

設定を読み込みます。

$ source ~/.bashrc

gce-ssh コマンドを打って上のGIF画像のようになればOKです。