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

rsl1atfo  于 2023-05-21  发布在  Git
关注(0)|答案(3)|浏览(220)

目标是将我的代码加密存储在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:未找到存储库:rsync:git@bitbucket.org/user/cryptremote.git
gcrypt:设置新仓库
协议版本不匹配--您的shell是否干净?
(see rsync手册页中有相关说明)
rsync错误:compat.c(600)[sender=v3.2.3]上的协议不兼容性(代码2)
错误:无法将一些引用推送到'gcrypt::rsync://git@bitbucket.org/user/cryptremote.git'

lskq00tm

lskq00tm1#

freetalk@bitbucket.org:我确认这永远不会起作用,因为Git远程存储库托管服务的SSH URL总是使用' git '用户(并依赖SSH密钥来验证和识别实际的用户帐户)。
spwhitton/git-remote-gcrypt commit 6233fde提到:
删除弃用的gcrypt::ssh://(使用rsync代替)
因此,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(例如,使用Bitbucket pipeline只显示rsync版本)。
illustrated here一样,如果SSH不起作用,gcrypt::https://user@bitbucket.org/user/test.git HTTPS URL可能会更好。

iovurdzv

iovurdzv2#

感谢评论,我让它在HTTPS上工作。
我为自己和你写了一个小教程。

使用git-remote-gcrypt加密远程Git仓库

常规工作流程

  • 生成GPG私钥和公钥(GnuPG Linux)
  • 创建远程存储库
  • 初始化本地存储库
  • 配置remote和gcrypt(下面的命令)
  • 克隆或推送

gcrypt example with rsync didn't work with 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:未找到存储库:rsync:git@bitbucket.org/user/cryptremote.git gcrypt:正在设置新的存储库协议版本不匹配--您的shell是否干净?(有关说明,请参见rsync手册页)rsync错误:compat.c(600)[sender=v3.2.3]上的协议不兼容(代码2)错误:无法将一些引用推送到'gcrypt::rsync://git@bitbucket.org/user/cryptremote.git'

gcrypt over HTTPS

手册页中的模板,修改为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密码提示问题

git-remote-gcrypt
gcrypt.publish-participants
默认情况下,参与者的gpg密钥ID通过使用gpg -R进行加密而被隐藏。将此选项设置为true将禁用该安全措施。
感谢那些有用的东西。
然而,我不喜欢我不得不使用HTTPS和应用程序密码,因为Bitbucket现在迫使其用户使用HTTPS。
虽然我不知道为什么rsync不起作用,但似乎问题出在Bitbucket上,因为我在我的电脑和Android之间完美地使用了rsync。

uubf1zoe

uubf1zoe3#

所以,似乎说明各不相同,有些迹象甚至不起作用;我开始尝试各种组合的“:“vs“/“和“https”vs.“rsync”vs“git”....最后找到了一个似乎可以工作的组合:

git remote add origin gcrypt::git@<URL>:<group>/test.git

git config remote.origin.gcrypt-participants "<my-key-id>"
git config remote.origin.gcrypt-signingkey "<my-key-id>"

git push -u origin alpha
gcrypt: Repository not found: git@<URL>:<group>/test.git
gcrypt: Setting up new repository
gcrypt: Remote ID is :id:<some hash>
gcrypt: Due to a longstanding bug, this push implicitly has --force.
gcrypt: Consider explicitly passing --force, and setting
gcrypt: gcrypt's require-explicit-force-push git config key.
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Compressing objects: 100% (2/2), done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
gcrypt: Encrypting to:  -r <my-key-id>
gcrypt: Requesting manifest signature
remote: 
remote: To create a merge request for master, visit:
remote:   http://<URL>/<group>/test/-/merge_requests/new?merge_request%5Bsource_branch%5D=master
remote: 
To <URL>:<group>/test.git
 * [new branch]      alpha -> alpha
Branch 'alpha' set up to track remote branch 'alpha' from 'origin'.

当我进入gitlab仓库时,我可以看到两个十六进制名称的新文件。
但随后,我尝试将repo克隆回来,并得到以下错误:

cd somewhere-else
git clone gcrypt::git@<URL>:<group>/test.git
Cloning into 'test'...
gpg: error reading key: No public key

有什么问题吗?刚才是我加密的,现在我不能复制了。
有什么建议吗?

相关问题