GCP Cloud Source Repositories に squid 経由でアクセスする設定例
[履歴] [最終更新] (2021/10/10 15:27:34)

概要

Squid は HTTP Proxy です。加えて、FTP over HTTP や SSH over HTTP といった技術を併用することで、FTP や SSH プロキシとしても機能します。本ページでは、

  • すべて HTTP 通信で GCP Cloud Source Repositories にアクセスする方法と、
  • SSH over HTTP を併用することで GCP Cloud Source Repositories にアクセスする方法

の二つを記載します。いずれも squid 経由とします。関連資料: Squid の簡単な設定例

Cloud SDK を用いる方法

Cloud SDK は GCP のための HTTP クライアントです。HTTP proxy である squid を経由して通信できます。

補足: Block access to consumer accounts による制限の対象となります。

環境変数を設定しておきます。

export http_proxy=http://localhost:3128
export https_proxy=http://localhost:3128

レポジトリを作成および clone します。

gcloud source repos create hello-world
gcloud source repos clone hello-world

すべて squid 経由の通信となります。

CONNECT oauth2.googleapis.com:443
CONNECT sourcerepo.googleapis.com:443

Git は SSH プロトコルと HTTP プロトコルの二つをサポートしています。上記設定を行なうと、HTTP プロトコルを利用するように clone されることが分かります。

vagrant@debian11:~/hello-world$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[credential "https://source.developers.google.com/"]
        helper = 
        helper = !gcloud auth git-helper --account=username@gmail.com --ignore-unknown $@
[remote "origin"]
        url = https://source.developers.google.com/p/myproject-20210411/r/hello-world
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

参考資料: Quickstart: Create a repository

SSH over HTTP を用いる方法

GCP Cloud Source Repositories は Git の SSH プロトコルによる通信にも対応しています。

補足: SSH 鍵による認証であるため、Block access to consumer accounts による制限の対象外となります。

参考資料: Setting up local authentication

connect-proxy のインストール

SSH プロトコルによる GCP Cloud Source Repositories との通信を squid 経由で行なうためには、SSH over HTTP という技術を併用する必要があります。具体的には connect-proxy を利用します。

sudo apt install connect-proxy

インストールされた connect または connect-proxy コマンドを利用します。

vagrant@debian11:~$ ls -l `which connect`
lrwxrwxrwx 1 root root 13 Dec 31  2020 /usr/bin/connect -> connect-proxy

ssh config の設定

SSH 鍵のペアを作成して、公開鍵を GCP に登録します。

ssh-keygen -t rsa -C "username@gmail.com"

秘密鍵を参照できるような SSH config を作成します。localhost の squid に対して SSH over HTTP 通信を行なうように ProxyCommand を設定することがポイントです。

vagrant@debian11:~$ cat .ssh/config
Host my-gcp-repos
  HostName source.developers.google.com
  User username@gmail.com
  IdentityFile ~/.ssh/id_rsa
  Port 2022
  ProxyCommand connect -H localhost:3128 %h %p

squid 設定変更

ポートおよびメソッドによる制限を squid で設定している場合には、TCP 443 に加えて TCP 2022 が必要となるため許可しておきます。

acl Safe_ports port 443         # https
acl Safe_ports port 2022         # SSH for GCP Cloud Source Repositories

acl SSL_ports port 443
acl SSL_ports port 2022

関連資料: 許可するポートの定義

git-clone

以下のように clone します。

git clone ssh://my-gcp-repos:/p/myproject-20210411/r/hello-world

確かに squid 経由となっていることが squid の access.log から確認できます。

CONNECT source.developers.google.com:2022

SSH プロトコルを利用するような git 設定になっていることも確認できます。

vagrant@debian11:~/hello-world$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = ssh://my-gcp-repos:/p/myproject-20210411/r/hello-world
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
関連ページ