如何使用 gcrypt 或其他加密远程仓库?

How to encrypt remote repo, with gcrypt or other?

目标是将我的代码加密存储在 BitBucket 远程存储库中。有些东西应该处理加密和解密,所以我登陆了 gcrypt 或完整,git-remote-gcrypt。

我有一个配置了 SSH 密钥的 Bitbucket 帐户。
这是我试过的。

rsync

我从手册中复制了这些命令。

git remote remove cryptremote
git remote add cryptremote gcrypt::rsync://git@bitbucket.org/user/cryptremote.git
git config remote.cryptremote.gcrypt-participants "user"
git push cryptremote master

控制台:

gcrypt: Repository not found: rsync://git@bitbucket.org/user/cryptremote.git
gcrypt: Setting up new repository
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(600) [sender=v3.2.3]
error: failed to push some refs to 'gcrypt::rsync://git@bitbucket.org/user/cryptremote.git'

freetalk@bitbucket.org:我确认这永远不会起作用,因为 SSH URL 到 Git 远程存储库托管服务将始终使用“git”用户(并依靠 SSH 密钥来验证和识别实际用户帐户)。

spwhitton/git-remote-gcrypt commit 6233fde 确实提到:

Remove deprecated gcrypt::ssh:// (use rsync instead)

所以 rsync URI 似乎更受支持,如 commit 3b69f81

你的情况:

 gcrypt::rsync://git@bitbucket.org/user/cryptremote.git
                ^^^^^            ^^^

对于任何“protocol version mismatch -- is your shell clean?”错误消息,请尝试 put in your .bashrc:

# for non-interactive sessions stop execution here -- https://serverfault.com/a/805532/67528
[[ $- != *i* ]] && return

但还要检查一个 possible rsync version mismatch (for instance, using a Bitbucket pipeline 只是为了显示 rsync 版本)。

illustrated here 一样,如果 SSH 无法正常工作,gcrypt::https://user@bitbucket.org/user/test.git HTTPS URL 可能会更好。

感谢评论,我让它可以通过 HTTPS 工作。

我为自己和你写了一个小教程。


使用 git-remote-gcrypt

加密远程 Git 存储库

一般工作流程

  • 生成 GPG 私钥和 public 密钥 (GnuPG Linux)
  • 创建远程仓库
  • 初始化一个本地仓库
  • 配置远程和 gcrypt(下面的命令)
  • 克隆或推送

使用 rsync 的 gcrypt 示例不适用于 Bitbucket

git remote add cryptremote gcrypt::rsync://git@bitbucket.org/USER/cryptremote.git
# gcrypt docs use :user but git usually uses /user format
# git remote add cryptremote gcrypt::rsync://git@bitbucket.org:USER/cryptremote.git
git config remote.cryptremote.gcrypt-participants "GPG_KEY_ID_OR_KEY_NAME"
git config remote.cryptremote.gcrypt-signingkey "GPG_KEY_ID_OR_KEY_NAME"
git push cryptremote master

gcrypt: Repository not found: rsync://git@bitbucket.org/user/cryptremote.git gcrypt: Setting up new repository protocol version mismatch -- is your shell clean? (see the rsync man page for an explanation) rsync error: protocol incompatibility (code 2) at compat.c(600) [sender=v3.2.3] error: failed to push some refs to 'gcrypt::rsync://git@bitbucket.org/user/cryptremote.git'

基于 HTTPS 的 gcrypt

来自手册页的模板,已修改为 HTTPS,示例存储库名称 'cryptremote':

git init
git remote add origin gcrypt::https://USER:APP_PASSWD@bitbucket.org/USER/cryptremote.git
git config remote.origin.gcrypt-participants "GPG_KEY_ID_OR_KEY_NAME"
git config remote.origin.gcrypt-signingkey "GPG_KEY_ID_OR_KEY_NAME"
# removes GPG password prompts but makes the name of the key owner public
git config remote.origin.gcrypt-publish-participants true
# in case of an existing encrypted repo
git clone gcrypt::https://USER:APP_PASSWD@bitbucket.org/USER/cryptremote.git
# in case of starting a new encrypted remote repo
git push --set-upstream origin master

修复 gcrypt 推送和拉取期间的 GPG 密码提示

man git-remote-gcrypt

gcrypt.publish-participants

By default, the gpg key ids of the participants are obscured by encrypting using gpg -R. Setting this option to true disables that security measure.


对有用的东西表示感谢。

但是,我不喜欢我必须使用 HTTPS 和应用程序密码,因为 Bitbucket 现在强制其用户将它们用于 HTTPS。

虽然我不确定为什么 rsync 不起作用,但问题似乎出在 Bitbucket 上,因为我在我的计算机和我的 Android.

之间完美地使用了 rsync