TL;DR
export REMOTE_GIT_PORT=3389 # ポート番号は任意
ssh -N -L $REMOTE_GIT_PORT:127.0.0.1:$REMOTE_GIT_POT ssh_user@remote_host &
cd /path/to/repository
git remote set-url origin ssh://git@127.0.0.1:$REMOTE_GIT_PORT/git_user/target_repo.git
git push
手順
- リモートサーバに SSH で接続できるようにします。サーバによって異なるので手順は割愛します。
- リモートサーバの Git が要求するポートを閉じます。今回の場合は 3389 番ポートです。
- リモートサーバに Git をインストールします。Git の待ち受けポートを 3389 番に設定します。
-
ローカル PC より、ssh 経由でリモートサーバの 3389 ポートにアクセスできるように、以下のコマンドを実行します。(SSH Tunnel する)
# ローカルホストの 3389 番ポート(左側)にアクセスすると、ssh 経由でリモートホストの # 3389 番ポート(右側)に接続される。(アクセスするアプリが何であっても) ssh -N -L 3389:127.0.0.1:3389 ssh_user@remote_host &
-
以下のコマンドで
git push
先をローカルホスト経由に変更します。3389
はリモートの Git の待ち受けポートに、git_user
は Git のユーザアカウント ID に、target_repo.git
はコミット先のリポジトリ名にそれぞれご利用の環境に合わせて変更してください。git remote set-url origin ssh://git@127.0.0.1:3389/git_user/target_repo.git
-
あとはいつも通り、
git push
します。初回 Push 時にはgit push -u origin master
とする必要があるかもしれません。git push
このままではローカルホストの 3389 番へのアクセスおよびローカルホスト経由の別の SSH トンネルが利用できなくなるので、利用後は速やかにバックグラウンド起動している ssh コマンドを終了させましょう。
別端末で ssh をフォアグラウンド起動しておき、Push した後Ctrl-C
するのが簡単かもしれません。
なぜこんなややこしいことをしているのか
「Github 的なイシュートラッカーと Git がどこからでもアクセスできるようにしたいよね! でもインターネットにリポジトリ&イシュートラッカー公開したくないので、仲間内だけに SSH 秘密鍵を渡して遠隔地のサークルメンバとリポジトリを共有したいよね!」っていうのが動機です。
素直に Github や bitbucket 使えばいい? はい、その通りです…😓
検証環境
VPSサービス: conoha VPS
リモートOS: CentOS7
Docker: 1.13.1
giteaコンテナ: gitea/gitea
ローカルOS: Windows10 バージョン 1903
Git for Windows: 2.19.1