設定與組態
取得與建立專案
基本快照
分支與合併
分享與更新專案
檢查與比較
修補
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
- 2.18.1 → 2.47.0 無變更
-
2.18.0
06/21/18
- 2.11.4 → 2.17.6 無變更
-
2.10.5
09/22/17
-
2.9.5
07/30/17
- 2.1.4 → 2.8.6 無變更
-
2.0.5
12/17/14
概要
chsh -s $(command -v git-shell) <user> git clone <user>@localhost:/path/to/repo.git
ssh <user>@localhost
描述
這是 SSH 帳戶的登入 Shell,用於提供受限的 Git 存取權限。它只允許執行實作 pull/push 功能的伺服器端 Git 命令,以及使用者家目錄中名為 git-shell-commands
的子目錄中存在的自訂命令。
命令
git shell 在 -c
選項之後接受以下命令
- git receive-pack <參數>
- git upload-pack <參數>
- git upload-archive <參數>
-
呼叫相應的伺服器端命令以支援用戶端的 git push、git fetch 或 git archive --remote 請求。
- cvs server
-
模擬 CVS 伺服器。請參閱 git-cvsserver[1]。
如果存在 ~/git-shell-commands
目錄,則 git shell 也會透過從使用者的家目錄執行 "git-shell-commands/<命令> <參數>
" 來處理其他自訂命令。
互動式使用
預設情況下,上述命令只能使用 -c
選項執行;此 Shell 不是互動式的。
如果存在 ~/git-shell-commands
目錄,則 git shell 也可以互動式執行(不帶任何參數)。如果 git-shell-commands
目錄中存在 help
命令,則會執行該命令以向使用者提供允許動作的概述。然後會出現 "git> " 提示,使用者可以在其中輸入 git-shell-commands
目錄中的任何命令,或輸入 exit
來關閉連線。
一般來說,此模式用作管理介面,允許使用者列出他們有權存取的儲存庫、建立、刪除或重新命名儲存庫,或變更儲存庫描述和權限。
如果存在 no-interactive-login
命令,則會執行該命令並中止互動式 Shell。
範例
停用互動式登入,而是顯示問候語
$ chsh -s /usr/bin/git-shell $ mkdir $HOME/git-shell-commands $ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF #!/bin/sh printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not" printf '%s\n' "provide interactive shell access." exit 128 EOF $ chmod +x $HOME/git-shell-commands/no-interactive-login
啟用 git-cvsserver 存取(這通常應該以上面的 no-interactive-login
範例作為先決條件,因為建立 git-shell-commands 目錄允許互動式登入)
$ cat >$HOME/git-shell-commands/cvs <<\EOF if ! test $# = 1 && test "$1" = "server" then echo >&2 "git-cvsserver only handles \"server\"" exit 1 fi exec git cvsserver server EOF $ chmod +x $HOME/git-shell-commands/cvs
另請參閱
ssh(1), git-daemon[1], contrib/git-shell-commands/README
GIT
git[1] 套件的一部分