← Back to home@fdghdfghdfghd

dsh-github-publish-skill

为 DeepSeek Harness 打造的 GitHub 发布 skill:推送前隐私扫描、SSH 一键推送、常见坑排查

Stars
0
Language
Python
Created
Oct 19, 2026
Updated
Oct 20, 2026

Introduction

dsh-github-publish-skill

License Platform DSH

先把隐私扫干净,再把项目推到 GitHub。 给 DeepSeek Harness(DSH)用的 skill,也可以脱离 DSH 直接当脚本用。

A privacy-first GitHub publish skill: scan for secrets, then push over SSH. Works as a DSH skill or plain PowerShell scripts.


为什么需要它

git push 看似一条命令,实际有三类坑:

坑表现
泄密姓名、学号、终端截图里的容器 ID、.env、私钥被打包进仓库
认证受限环境里 HTTPS 凭据助手起不来(sh.exe 建不了管道),GIT_SSH_COMMAND 同样走 shell 也不行
权限复制出去的私钥继承了宽松 ACL,OpenSSH 直接拒收(Bad permissions)

这个 skill 把三件事都处理了:扫描 → 用 .cmd 包装脚本绕过 shell → 固定 key 位置与 ACL。

特性

  • 隐私扫描:私钥、token(ghp_ / github_pat_)、sk-、绝对用户路径、身份证号、手机号、IP、容器 ID、.env
  • 人工复核提示:图片和 Office 文件单独列出(截图与文档元数据是最常见的泄露源)
  • 零依赖:只要 git + OpenSSH + Python 3.8
  • 可脱离 DSH:脚本独立可用,不装 skill 也能跑
  • 幂等:重复运行只会更新 remote,不会重复添加

安装

# 方式一:装成 DSH skill(推荐)
Copy-Item -Recurse -Force . "$env:DSH_HOME\skills\github-publish"

# 方式二:不装,直接用脚本
python scripts/privacy_check.py "D:\projects\my-app"

装成 skill 后,在会话里说"把这个推到 GitHub"就会自动触发。

快速开始

# 1. 推送前扫描(有问题返回退出码 1)
python scripts/privacy_check.py "D:\projects\my-app"

# 2. 首次配置:生成 key,打印公钥
powershell -ExecutionPolicy Bypass -File scripts/setup_ssh.ps1
#    把公钥贴到 https://github.com/settings/ssh/new

# 3. 推送
powershell -ExecutionPolicy Bypass -File scripts/push.ps1 `
  -Path "D:\projects\my-app" -Init -Commit -Message "init" `
  -Remote "git@github.com:<你的用户名>/my-app.git"

默认 key 目录是 $HOME/.dsh-github,用 -KeyDir 可以改。

push.ps1 参数

参数作用
-Path仓库目录,默认当前目录
-Init不是 git 仓库时自动 git init
-Commit先 git add -A + commit
-Remote设置/更新 origin
-DryRun只演练,不真推
-KeyDirkey 所在目录
-Branch默认 main

工作原理

git 在 Windows 上执行 GIT_SSH_COMMAND 时会套一层 sh -c。在受限环境里 sh.exe 可能直接起不来:

sh.exe: *** fatal error - couldn't create signal pipe, Win32 error 5

push.ps1 的做法是生成一个 .cmd 包装脚本并赋给 GIT_SSH——git 会直接 CreateProcess,不经过 shell:

@echo off
ssh.exe -i "<key>" -o IdentitiesOnly=yes -o UserKnownHostsFile="<known_hosts>" -o StrictHostKeyChecking=accept-new %*

常见问题

Q:ssh -T 报错但明明连上了? ssh -T 认证成功时退出码也是 1(GitHub 不提供 shell)。看输出里有没有 Hi <user>!。

Q:ls-remote 没有任何输出? 空仓库正常如此,退出码 0。用 git ls-remote origin refs/heads/main 对比 git rev-parse HEAD 判断。

Q:私钥复制到别处就用不了? Windows 上复制文件不保留 ACL,副本会继承目标目录权限,ssh 判定"太宽"而拒收。要么原地生成,要么复制后 icacls 收紧。

Q:token 能代替 SSH 吗? 能,但 token 会进 shell 历史或配置文件;SSH key 不需要在对话里传递任何秘密。

安全约定

  • 私钥只放本地默认目录,.gitignore 已排除 id_ed25519、known_hosts、*.pem
  • 提交作者默认 用户名@users.noreply.github.com(建议在 GitHub 设置里开启 "Keep my email addresses private")
  • 扫描器对自身源码里的规则字符串做了跳过,避免误报

License

MIT