Ssh

限制 git 使用者的 shell 訪問,但仍允許推/拉訪問

  • October 3, 2019

我在我的伺服器上託管了一個 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.

具體來說,我想——

  1. git通過使用者的 ssh 和密碼禁用 shell 訪問
  2. 仍然允許我自己(as root)能夠以git互動方式假設使用者
  3. 仍然允許開發人員push/pull在儲存庫上

我嘗試為git使用者禁用 shell,如下所示:

root@example:~# usermod -s /usr/sbin/nologin git

這對#1(ssh訪問被阻止)和#2(我仍然可以訪問shell sudo -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

引用自:https://serverfault.com/questions/986649