【问题标题】:Limit SSH User to a shell command将 SSH 用户限制为 shell 命令
【发布时间】:2013-05-17 00:04:55
【问题描述】:

我的问题是

如何允许用户通过 ssh 连接到我的服务器,但仅限于 shell 命令和目录?

我的情况

我正在使用 git 将代码部署到我的服务器。我有两台服务器,第一台是产品服务器,第二台是 git 服务器。

我的团队使用 git 服务器来拉取/推送代码。

在我的产品服务器上,我设置了 git 客户端。每当我想发布一个版本时,我都会将它推送到我的 git 服务器(master 或其他分支......),然后我 ssh 进入我的产品服务器以提取代码。

我想和我的队友共享代码拉取权限,但不想让他们运行除 git 之外的任何命令,并将他们限制在一个目录中。

我要限制的目录的所有者是apache:apache,所以如果ssh用户以apache权限运行就好了。

谢谢,

已解决:我已将lshell 与一组限制命令一起使用。

【问题讨论】:

标签: git shell ssh


【解决方案1】:

在 git 用户中禁用 shell 的一个简单命令是将 /usr/bin/bash 替换为 /usr/bin/git-shell。在 /etc/password 文件中替换它或使用命令:

usermod -s /usr/bin/git-shell [username]

从 Git 官方网站查看此文档:Setting Up the Server。 如果您想在其上安装外壳但将其限制为目录使用,请提供附加信息: rbash。与 git-shell 相同,只需将用户 shell 替换为它即可。

【讨论】:

  • 我尝试使用 git-shell 但不知道如何将其他命令放入 ~/git-shell-commands,默认命令只是 help列表。谢谢,
【解决方案2】:

你应该考虑gitolite,这是一个authorization layer,可以是ssh forced command

而 ssh 强制命令正是为了将 ssh 限制为一个唯一命令(在 gitolite 的情况下,这是一个控制访问权限并确保只执行 git 命令的脚本)。

即使你使用 gitolite,单独使用 ssh 强制命令(根本不链接到 git)仍然值得考虑,以便控制和限制用户可以通过SSH 会话。


OP Tarzanwho didn't want to install another service,安装了另一个服务(Ishell),正是基于ssh强制命令;)

【讨论】:

  • 我的产品服务器上有一个生产网站在上面运行,所以我不想设置更多的服务(比如 gitolite),我只是设置了 git 客户端。但是在我的 git 服务器上,我确实在上面设置了 gitolite 和 gitlab。谢谢你的建议。
  • @Tarzan 强制命令是 ssh 的一个特性,不需要安装任何额外的服务。
  • @Tarzan 我已将 IShell 包含在答案中:它使用强制命令,正如我在答案中所建议的那样。
  • 谢谢,我的意思是 gitolite 是一个系统,比 lshell 更重更大。抱歉解释错误。
  • @Tarzan 我明白了。但是使用强制命令的建议仍然有效,不是吗?