ubuntu下的git服务器禁止用户shell登录
封面图
•
2025-11-07
•
git
200
0
0
0
在 Ubuntu 系统中,如果你部署了一个 Git 服务器(比如使用 `git-daemon` 或 `gitolite`、`gitea`、`gitlab` 等),并且希望**禁止用户通过 SSH 登录到系统 shell**,但仍然允许他们通过 Git 协议进行克隆、推送等操作,可以按照以下步骤进行配置。 --- ## ✅ 目标 - **禁止用户通过 SSH 登录 shell** - **允许用户通过 Git 协议(如 git+ssh)访问仓库** --- ## 🔧 步骤一:修改 SSH 配置文件 编辑 `/etc/ssh/sshd_config` 文件: ```bash sudo nano /etc/ssh/sshd_config ``` 添加或修改以下内容: ```ini Match User git ForceCommand git-shell ChrootDirectory /path/to/git/repo AllowTcpForwarding no X11Forwarding no PermitTunnel no GatewayPorts no AllowAgentForwarding no ``` > 注意: > - `Match User git` 表示只对用户 `git` 生效。 > - `ForceCommand git-shell` 强制用户登录后只能执行 `git-shell`,不能进入 shell。 > - `ChrootDirectory` 可选,用于限制用户只能访问特定目录。 > - 其他选项用于禁用不必要的功能。 --- ## 🔧 步骤二:确保 `git-shell` 存在 检查 `git-shell` 是否存在: ```bash which git-shell ``` 通常路径是 `/usr/lib/git-core/git-shell`。 如果不存在,可能需要安装 `git` 包: ```bash sudo apt install git ``` --- ## 🔧 步骤三:设置用户权限 确保 `git` 用户的家目录和 `.ssh` 目录权限正确: ```bash sudo chown -R git:git /home/git sudo chmod 700 /home/git/.ssh sudo chmod 600 /home/git/.ssh/authorized_keys ``` --- ## 🔧 步骤四:重启 SSH 服务 ```bash sudo systemctl restart ssh ``` --- ## 🚫 禁止用户登录 shell 如果你不想让用户有任何 shell 访问,还可以将 `git` 用户的 shell 设置为 `/usr/bin/nologin` 或 `/bin/false`: ```bash sudo usermod -s /usr/bin/nologin git ``` 或者: ```bash sudo usermod -s /bin/false git ``` 这会阻止用户通过 SSH 登录 shell,但因为 `ForceCommand git-shell` 的作用,用户仍能通过 Git 协议访问仓库。 --- ## ✅ 测试验证 1. 尝试 SSH 登录: ```bash ssh git@your-server ``` 应该看到类似下面的提示: ``` This service allows git access only. ``` 或者直接退出,不进入 shell。 2. 测试 Git 操作: ```bash git clone git@your-server:/path/to/repo.git ``` 如果成功,说明配置正确。 --- ## 📌 总结 | 配置项 | 说明 | |--------|------| | `ForceCommand git-shell` | 禁止用户进入 shell | | `ChrootDirectory` | 可选,限制用户目录 | | `usermod -s /bin/false` | 禁止用户登录 shell | | `sshd_config` | SSH 服务配置文件 | --- 如果你使用的是 GitLab、Gitea 或其他 Git 服务器软件,它们通常有自己的方式来管理用户权限,可以参考其官方文档进行配置。如果你有具体使用的平台,我可以提供更详细的指导。
上一篇:
git清除用户名密码
下一篇:
GIT 查看/修改用户名和邮箱地址
标题录入,一次不能超过6条
留言
评论