SSH 経由でクローンができない #5
Labels
No labels
No milestone
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
genji1024/forgejo-server#5
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
HTTPS 経由でのリポジトリのクローンはできるが、SSH 経由でのクローンができない。
@bot-genji1024 原因を調査して報告してください。
調査結果(原因報告)
@genji1024 SSH 経由のクローンができない原因を調査しました。報告のみでコード・設定の変更は行っていません。
結論
SSH のクローンができないのは、「コンテナの SSH(22) ポートがホストに公開されておらず、かつ接続先ドメインが Cloudflare 経由(80/443 のみ)のため、外部から SSH ポートへ到達できない」ことが原因です。HTTPS(3000)が動くのは HTTP ポートが公開されているためです。
調査で確認した事実
app.ini[server]セクション(デプロイ先forgejo/gitea/conf/app.ini)DISABLE_SSH = false(SSH 機能は有効)SSH_PORT = 22/SSH_LISTEN_PORT = 22(コンテナ内で SSH を 22 で待受ける設定)SSH_DOMAIN = forgejo.genji1024.comSTART_SSH_SERVER(SSH サーバー起動フラグ)が明示設定されていない(デフォルトは有効)forgejo/ssh/配下にssh_host_ed25519_key・ssh_host_rsa_key・ssh_host_ecdsa_key(各.pubあり)を確認authorized_keys—forgejo/git/.ssh/authorized_keysにcommand=... gitea ... serv key-1ラッパ付きでユーザの公開鍵が登録済み(SSH 内部配線は正常)compose.yaml(server サービス):ports: ['3000:3000']のみ → SSH(22) のポートマッピングなしports: ['3000:3000']のみforgejo.genji1024.comは Cloudflare の IP(104.21.77.223 / 172.67.212.31 等)に解決原因の整理
forgejo.genji1024.com:22への TCP は Cloudflare で遮断される(HTTPS:443 は proxy される)。修正の方向性(参考・未実施)
compose.yamlの server サービスに SSH 用ポートマッピングを追加(例:'2222:22'。ホスト側で 22 が空いていれば'22:22'も可)app.iniのSSH_PORT/SSH_LISTEN_PORT/SSH_DOMAINを上記マッピングに合わせ、START_SSH_SERVER = trueを明示するその他
@bot-genji1024 Rootless Docker でコンテナを起動し、ホストの Nginx をリバースプロキシとして運用しています。特権ポートは Rootless コンテナからは直接公開できないと思いますが、どうしましょうか?
回答: Rootless Docker での SSH(22) ポートの公開方針
@genji1024 ご質問ありがとうございます。ご認識の通り、Rootless Docker のコンテナからは特権ポート(1024 未満、例: 22)を直接ホストに公開できません。これを踏まえた方針案をご提示します(提案のみ・未実施。承認いただければ実装に着手します)。
方針案: SSH を非特権ポート 2222 で公開する
compose.yamlの server サービスにports: ['2222:22']を追加(コンテナ内の SSH(22) をホストの 2222 に公開。Rootless Docker でも 1024 以上のホストポートなら公開可能)app.iniの[server]を以下の通り設定:SSH_PORT = 2222(クライアントが接続する公開ポート)SSH_LISTEN_PORT = 22(コンテナ内の待受ポートは 22 のまま)SSH_DOMAIN = forgejo.genji1024.comSTART_SSH_SERVER = trueを明示ssh://[email protected]:2222/genji1024/<repo>.gitになります前提として外せない制約: Cloudflare は 80/443 のみプロキシ
前回報告(c308)の通り、
forgejo.genji1024.comは Cloudflare プロキシ背後にあり、Cloudflare は 80/443 しかプロキシしないため、どのポート番号にしてもforgejo.genji1024.com経由の SSH は通じません。SSH 接続は Cloudflare のプロキシ対象外の経路、具体的には:ssh://git@<ホスト実IP>:2222/...)、またはを利用する必要があります。
承認のお願い
上記方針案(2222 での公開 + app.ini 設定)で進めてよろしいですか? 承認いただければ、
compose.yamlのポートマッピング追加と app.ini 設定・動作確認を PR として実装します。ご希望のポート番号・接続経路(ホスト実 IP or サブドメイン)があれば併せてご指定ください。@bot-genji1024 ありがとうございます。その方針で問題ないと思います。実装と PR 発行をお願いします。