Squid は HTTP Proxy です。加えて、FTP over HTTP や SSH over HTTP といった技術を併用することで、FTP や SSH プロキシとしても機能します。本ページでは、
の二つを記載します。いずれも squid 経由とします。関連資料: Squid の簡単な設定例
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
GCP Cloud Source Repositories は Git の SSH プロトコルによる通信にも対応しています。
補足: SSH 鍵による認証であるため、Block access to consumer accounts による制限の対象外となります。
参考資料: Setting up local authentication
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 鍵のペアを作成して、公開鍵を 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 で設定している場合には、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
関連資料: 許可するポートの定義
以下のように 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