以前にAWSにおいて踏み台サーバ経由のEC2インスタンスへのSSHログインをpecoとEC2 APIを使って楽にする方法を書きました。
GCPではデフォルトでは踏み台サーバなし(パブリックアクセス)でSSHログインできますが、セキュリティ要件として踏み台サーバ経由にしたい場合があると思います。 踏み台サーバやNATに関しては以下の記事をご参考ください。
GCEインスタンスにログインする場合、以下のようにインスタンス名とゾーン名を調べてコマンドを打つ必要があり、大変面倒です。
$ gcloud compute ssh sample-linux001 --internal-ip --zone asia-northeast1-a
それをちょっとしたbash関数を入れることで楽にしました。
こんな感じになります
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です。