Ssh
限制 git 使用者的 shell 訪問,但仍允許推/拉訪問
我在我的伺服器上託管了一個 git 儲存庫。任何人都可以
push
/pull
來自以下遠端網址:ssh://git@example.com/opt/git/my-project.git
具體來說,任何
ssh
有權訪問git@example.com
使用者的人都可以推/拉(即我將他們的公鑰列為authorized_key
)我想繼續允許推/拉訪問,但我想禁用外殼/登錄訪問
Github 使用這種方法 - 如果你嘗試 ssh 到他們的任何 git 伺服器,你會得到:
$ ssh git@github.com PTY allocation request failed on channel 0 Hi [USER]! You've successfully authenticated, but GitHub does not provide shell access. Connection to github.com closed.
具體來說,我想——
git
通過使用者的 ssh 和密碼禁用 shell 訪問- 仍然允許我自己(as
root
)能夠以git
互動方式假設使用者- 仍然允許開發人員
push
/pull
在儲存庫上我嘗試為
git
使用者禁用 shell,如下所示:root@example:~# usermod -s /usr/sbin/nologin git
這對#1(
ssh
訪問被阻止)和#2(我仍然可以訪問shellsudo -u git -s /bin/bash
)非常有用但是,#3 是不可行的。切斷 shell 訪問顯然也會禁用
push
/pull
訪問(因為它可能使用ssh
)。這裡有其他解決方案嗎?Github 自己是如何做到這一點的?
謝謝!
最簡單的解決方案是使用 git-shell 作為使用者的登錄 shell。
可以在此處找到有關如何設置的詳細說明:https ://git-scm.com/docs/git-shell或 git shell 手冊頁
man git shell
在authorized_keys 文件中,您可以將選項/限制添加到使用特定密鑰對進行身份驗證時允許的內容。
添加限制:
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
有關其含義,請參見https://www.freebsd.org/cgi/man.cgi?sshd(8)中的 authorized_keys 文件格式說明
cat ~/.ssh/authorized_keys no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB... comment no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDE... other comment
您可以通過在 sshd_config 文件的“匹配使用者”塊中設置它們來為 git 帳戶添加類似的限制:
### add this to the bottom of the sshd_config Match User git X11Forwarding no AllowTcpForwarding no PermitTunnel no