SSHトンネル経由でVPN/社内ネットワーク内のGitリポジトリにpush/pull/cloneする
はじめに
コロナで在宅ワークするにあたり、上図の在宅開発端末*1からダイレクトにVPN/社内ネットワーウ内の社内サーバにあるGitリポジトリにpush/pullしたいニーズが発生したのでメモです*2。
課題感
git push/pullするたびに毎回、上図の「在宅作業端末」を経由する必要があり*3、具体的にはgit push/pull/cloneするたびに次のような作業が発生します。
- 「在宅開発端末」→「社内サーバ」にgit push
- 「社内サーバ」→「在宅開発端末」にgit clone/pull
- 「社内サーバ」から「在宅作業端末」にgit clone/pull
- これを「在宅作業端末」から「在宅開発端末」にscp等でコピー
やりたき
「在宅開発端末」にて直接「社内サーバ」に対して、git clone/pull/pushしたい。
これを実現する手順を述べます。
登場する端末
- 社内サーバ
- 在宅作業端末
- 社内サーバ含む社内ネットワークにVPN経由でアクセスできる端末です。
- 家庭内ネットワークで在宅開発端末にアクセスできます。
- 便宜のため家庭内ネットワークにおけるIPは「192.168.0.2」とします。
- 在宅開発端末
- 社内ネットワークにアクセスできない端末です。
- 家庭内ネットワークで在宅作業端末にアクセスできます。
- 便宜のために家庭内ネットワークにおけるIPは「192.168.0.3」とします。
方針
手順
1. 「在宅開発端末」にてSSHポートフォワードを実行
$ ssh [在宅作業端末ユーザー名]@[在宅作業端末IP] -L [在宅開発端末転送ポート]:[社内サーバ]:[社内サーバのポート] -g -f -N # 例) 192.168.0.3 にて # $ ssh kensho@192.168.0.2 -L 8082:syanai.server.com:443 -g -f -N
なお、社内サーバのgitlabにはhttpsでアクセスする前提としているため、443番ポートとしています*8*9。
ポートフォワードのプロセスが起動できているかは、在宅開発端末にてpsコマンドでプロセスを確認できます。
$ ps aux | grep ssh # 結果の例 # raspberrypi 21934 0.0 0.0 11668 1776 ? Ss 12月19 0:00 ssh kensho@192.168.0.2 -L 8082:syanai.server.com:443 -g -f -N
SSHポートフォワードを停止する場合は、killでプロセスを殺します*10。
2. 「自宅開発端末」にて、localhostに対してgit clone/push/pull
$ git clone https://localhost:[在宅開発端末転送ポート]/[gitリポジトリpath] # 例)192.168.0.3にて # $ git clone https://localhost:8082/hoge/fuga
git pullやpushも同様です。
なお、すでに「在宅作業端末」からscpなどで「在宅開発端末」に持ち込んだリポジトリに対して設定変更する場合は、
ファイル.git/config
を開き、[remote "origin"]
のurl
を、今回の例で言えばsyanai.server.com
からlocalhost:8082
に変更ください。
git clone/fetchしようとしたときにエラー「fatal: unable to access 'https://XXXXX.git/': SSL certificate problem: self signed certificate」が出たら下記を実行すると幸せになれるかも*11。
git config http.sslVerify false
*1:私の場合はRaspberryPiやJetsonでしたが、windowsやmacでも同じです。
*2:過去に何度かやってきたのですが、久々にやろうとしたら忘れてしまって、結局色々ググらないといけない事態になったので改めて備忘録としてまとめることにしました。
*3:ただでさえバグと戦っているのに、その前後でこの作業してたらメンタルが持たない
*5:例えば8082ポート
*6:例えばsyanai.server.comの443ポート
*7:1.で8082ポートを指定した場合は8082ポート
*8:httpsでなくsshでアクセスする場合は、転送ポート番号を22番ポートにするなど変更する必要があります。
*9:ここでは在宅開発端末にてSSHポートフォワードを実行していますが、逆に、在宅作業端末にてSSHポートフォワードする方法もあります。これはSSHリモートポートフォワードとかSSHリバースポートフォワードと呼ばれ-Rオプションで実現できます。具体的には在宅作業端末にて例えば $ ssh develop_user@192.168.0.3 -R 8082:syanai.server.com:443 -g -f -N
*10:上の例の場合、「$ kill -9 21934」