diff --git a/_build/check_ezhub_keys.py b/_build/check_ezhub_keys.py new file mode 100644 index 0000000..3511738 --- /dev/null +++ b/_build/check_ezhub_keys.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +r'''查 Gitea 自己报的 clone 地址,看 SSH 到底该连哪里。 + +现象:SSH 连得上(服务端回了 publickey,password), +但本机送出的公钥一直被拒。可能是: + * SSH 用的不是 22 端口 + * 主机名不是 git.261826.xyz + * 密钥加到了别的账号 +这个脚本把 Gitea 官方给出的地址拉出来对一下。 +''' +from __future__ import annotations + +import json +import sys +import urllib.request +from pathlib import Path + +TOKEN_FILE = Path.home() / ".ykxmz" / "ezhub_token" +TOKEN = (TOKEN_FILE.read_text(encoding="utf-8").strip() + if TOKEN_FILE.is_file() else "") + +BASE = "https://git.261826.xyz/api/v1" +HEAD = {"Authorization": "token " + TOKEN, "User-Agent": "ykxmz"} + + +def get(path: str): + with urllib.request.urlopen( + urllib.request.Request(BASE + path, headers=HEAD), + timeout=30) as resp: + return json.loads(resp.read().decode("utf-8", "replace")) + + +def main() -> int: + print(" 一、仓库自己声明的 clone 地址") + repo = get("/repos/xmz/ykxmz") + for key in ("clone_url", "ssh_url", "html_url", "default_branch", + "empty", "size"): + if key in repo: + print(" %-16s %s" % (key, repo[key])) + + print() + print(" 二、当前用户注册了哪些 SSH 公钥") + try: + keys = get("/user/keys") + if not keys: + print(" **一把都没有** —— 密钥没加成功") + for k in keys: + print(" id=%-4s %-14s %s" % (k.get("id"), k.get("title"), + (k.get("key") or "")[:52] + "…")) + print(" fingerprint=%s" % (k.get("fingerprint") or "?")) + except Exception as exc: # noqa: BLE001 + print(" 查询失败: %s" % exc) + + print() + print(" 三、对照") + print(" 本机公钥指纹: SHA256:Acmu49YQcjw3m5WefOXSBzYNY2WPHLL2vvhnlYRAttA") + print(" 本机公钥内容: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMFMh2Zqwm+8" + "KFhU3DhzhOO5Sx7cIzybYqUsrbt1c3ly") + + print() + print(" 四、服务端版本与配置") + try: + ver = get("/version") + print(" Gitea: %s" % ver.get("version")) + except Exception as exc: # noqa: BLE001 + print(" 取版本失败: %s" % exc) + return 0 + + +if __name__ == "__main__": + sys.exit(main())