GitLab Shell
GitLab Shell handles git SSH sessions for GitLab
GitLab Shell handles git SSH sessions for GitLab and modifies the list of authorized keys. GitLab Shell is not a Unix shell nor a replacement for Bash or Zsh.
When you access the GitLab server over SSH then GitLab Shell will:
- Limits you to predefined git commands (git push, git pull).
- Call the GitLab Rails API to check if you are authorized, and what Gitaly server your repository is on
- Copy data back and forth between the SSH client and the Gitaly server
If you access a GitLab server over HTTP(S) you end up in gitlab-workhorse.
An overview of the four cases described above:
- git pull over SSH -> gitlab-shell -> API call to gitlab-rails (Authorization) -> accept or decline -> establish Gitaly session
- git push over SSH -> gitlab-shell (git command is not executed yet) -> establish Gitaly session -> (in Gitaly) gitlab-shell pre-receive hook -> API call to gitlab-rails (authorization) -> accept or decline push
Code status
Requirements
GitLab Shell is written in Go, and needs a Go compiler to build. It still requires Ruby to build and test, but not to run.
Download and install the current version of Go from https://golang.org/dl/
Setup
make setup
Check
Checks if GitLab API access and redis via internal API can be reached:
make check
Testing
Run tests:
bundle install
make test
Run gofmt:
make verify
Run both test and verify (the default Makefile target):
bundle install
make validate
Git LFS remark
Starting with GitLab 8.12, GitLab supports Git LFS authentication through SSH.
Releasing a new version
GitLab Shell is versioned by git tags, and the version used by the Rails
application is stored in
GITLAB_SHELL_VERSION.
For each version, there is a raw version and a tag version:
- The raw version is the version number. For instance,
15.2.8. - The tag version is the raw version prefixed with
v. For instance,v15.2.8.
To release a new version of GitLab Shell and have that version available to the Rails application:
- Create a merge request to update the
CHANGELOGwith the tag version and theVERSIONfile with the raw version. - Ask a maintainer to review and merge the merge request. If you're already a maintainer, second maintainer review is not required.
- Add a new git tag with the tag version.
- Update
GITLAB_SHELL_VERSIONin the Rails application to the raw version. (Note: this can be done as a separate MR to that, or in and MR that will make use of the latest GitLab Shell changes.)
Contributing
See CONTRIBUTING.md.
License
See LICENSE.