如何使用私钥从Gitlab下载私有项目

时间:2016-07-10 17:13:33

标签: rsa gitlab ssh-keys

我在Gitlab中创建了一个私有项目,我试图写下一个简单的部署脚本,以便在从存储库下载后启动项目,并且我正在使用Ubuntu'用于执行脚本的bash环境。

我使用简单的curl命令对公共项目做了同样的事情:

curl -fSL "https://gitlab.com/MyUsername/MyProject/repository/archive.zip?ref=master" -o project.zip

answers显示如何使用Gitlab的用户名+密码或private_token以及curl命令对私有项目执行相同的操作。但我更喜欢使用"部署密钥" Gitlab提供的功能。到目前为止,我完成了Gitlab's documentation指示:

ssh-keygen -t rsa -C "$your_email"

然后上传公钥文件以在Gitlab中部署我项目的密钥。我的问题是:如何使用我拥有的私钥下载我项目的最新版本?我应该使用curl还是scp还是其他什么?还请包括项目何时属于某个组的示例。

1 个答案:

答案 0 :(得分:2)

SSH私钥不能用于HTTPS连接 - 因此,您需要使用通过SSH公开的服务。在这种情况下,这意味着要执行git clone(或者,理想情况下,如果您有现有克隆,git fetch以递增方式更新它),然后是git archive

#!/bin/bash
#      ^^^^-- /bin/bash, not /bin/sh, or the [[ ]] syntax isn't guaranteed to work

# change or parameterize these
repo_path=git@gitlabhost.com:group/repo.git
repo_dir=/path/to/local-dir
output_path=/path/to/archive.zip

if [[ -d $repo_dir ]]; then
  (cd "$repo_dir" && exec git fetch) || exit
else
  git clone "$repo_path" "$repo_dir" || exit
fi

# and to create the archive
cd "$repo_dir" && git archive --format=zip -o "$output_path" origin/master 

创建初始克隆后,执行git fetch和本地git archive实际上比下载整个zip文件更具带宽效率,因为它仅提取自上次更新以来的更改

如果您的私钥保存为~/.ssh/id_rsa,则会自动使用。否则,您需要创建一个~/.ssh/config文件条目,如下所示:

Host gitlabhost.com # substituting the real hostname
    User git # use the username "git" connecting to this host by default
    IdentityFile /path/to/your/id_rsa # if not in the default location