[H]HOME[P]POSTS[A]ABOUT[N]NOW[/]SEARCH

git clone treo mãi: thủ phạm là Cloudflare

Domain đi qua proxy thì cổng SSH tùy biến không đi theo. Đi đường HTTPS và đừng để token lộ ra.

AUTHOR └ CrisCATEGORY └ Công cụPUBLISHED └ CỠ CHỮ

git clone ssh://git@git.example.com:2222/... đứng yên. Không lỗi, không timeout rõ ràng, chỉ một tiến trình ssh treo vô tận. Mình mất gần hai phút mới nhìn ra lý do.

Chẩn đoán trong 30 giây#

CODE Shell
getent hosts git.example.com        # ra IP của Cloudflare, không phải máy mình
ss -ltnp | grep -E ':(22|2222)\b'   # cổng 2222 không hề lắng nghe trên máy

Tên miền trỏ vào proxy của Cloudflare, và proxy chỉ chuyển HTTP/HTTPS. Cổng SSH tùy biến của Gitea thì không được publish, nên gói tin đi vào khoảng không.

Đường tắt qua HTTPS, không lộ token#

Không nhét token vào URL, vì URL nằm lại trong .git/config và lịch sử shell. Dùng GIT_ASKPASS, một script nhỏ trả tên và mật khẩu khi git hỏi:

CODE Shell
#!/bin/bash
case "$1" in
  Username*) echo bot ;;
  *) cat /đường/dẫn/token ;;
esac
CODE Shell
GIT_ASKPASS=./askpass.sh GIT_TERMINAL_PROMPT=0 git clone https://git.example.com/bot/repo.git

GIT_TERMINAL_PROMPT=0 quan trọng: nếu thiếu thông tin, git báo lỗi ngay chứ không chờ bàn phím mãi.

NOTE Remote vẫn là URL HTTPS trơn. Token chỉ tồn tại trong tiến trình lúc git hỏi, không nằm trong cấu hình.

Nhớ đặt -o ConnectTimeout cho mọi lệnh ssh trong script. Sai một lần với timeout vô hạn là mất cả phiên chờ.

STATUS#

└ĐÃ THỬHTTPS với GIT_ASKPASS trên Gitea tự host, clone và push đều chạy.└CHƯA THỬMở SSH qua Tailscale hoặc một subdomain không qua proxy.└SAI Ở ĐÂUGiả định cổng SSH của Gitea đã được publish ra ngoài, nên chờ clone treo gần hai phút.
HẾT BÀIThấy hữu ích thì cho mèo một con cá.
·TẢI .MD··← Tất cả bài viếtLên đầu trang ↑
0%