-
A1. 附录 A:Git 在其他环境中
- A1.1 图形界面
- A1.2 Git 在 Visual Studio 中
- A1.3 Git 在 Visual Studio Code 中
- A1.4 Git 在 IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine 中
- A1.5 Git 在 Sublime Text 中
- A1.6 Git 在 Bash 中
- A1.7 Git 在 Zsh 中
- A1.8 Git 在 PowerShell 中
- A1.9 总结
-
A2. 附录 B:将 Git 嵌入您的应用程序
-
A3. 附录 C:Git 命令
4.4 Git 在服务器上 - 服务器设置
服务器设置
让我们一起了解如何在服务器端设置 SSH 访问。在本示例中,您将使用 authorized_keys
方法来验证您的用户。我们还假设您正在运行一个标准的 Linux 发行版,如 Ubuntu。
注意
|
这里描述的大部分内容可以使用 |
首先,您需要创建一个 git
用户账户和一个用于该用户的 .ssh
目录。
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
接下来,您需要将一些开发人员的 SSH 公钥添加到 git
用户的 authorized_keys
文件中。假设您有一些受信任的公钥,并将它们保存到临时文件中。再次,公钥看起来像这样
$ cat /tmp/id_rsa.john.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4L
ojG6rs6hPB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4k
Yjh6541NYsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9Ez
Sdfd8AcCIicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myiv
O7TCUSBdLQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPq
dAv8JggJICUvax2T9va5 gsg-keypair
您只需将它们追加到 git
用户的 .ssh
目录中的 authorized_keys
文件中即可
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys
现在,您可以使用 git init
命令(带 --bare
选项)为他们设置一个空仓库,这会初始化一个没有工作目录的仓库
$ cd /srv/git
$ mkdir project.git
$ cd project.git
$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
然后,John、Josie 或 Jessica 可以通过将它添加为远程仓库并将分支推送到仓库中来推送项目的第一个版本。请注意,每次您想要添加项目时,都需要有人登录到机器并创建一个裸仓库。让我们使用 gitserver
作为您设置 git
用户和仓库的服务器的主机名。如果您在内部运行它,并且您设置了 DNS 将 gitserver
指向该服务器,那么您就可以使用与上面几乎相同的命令(假设 myproject
是一个已经存在且包含文件的项目)
# on John's computer
$ cd myproject
$ git init
$ git add .
$ git commit -m 'Initial commit'
$ git remote add origin git@gitserver:/srv/git/project.git
$ git push origin master
此时,其他人可以轻松地将代码克隆下来并推送更改。
$ git clone git@gitserver:/srv/git/project.git
$ cd project
$ vim README
$ git commit -am 'Fix for README file'
$ git push origin master
使用此方法,您可以快速为少量开发人员建立一个可读写的 Git 服务器。
请注意,目前所有这些用户都可以登录服务器,并以 git
用户身份获取 shell。如果您想限制此功能,则需要在 /etc/passwd
文件中将 shell 更改为其他内容。
您可以使用一个名为 git-shell
的有限 shell 工具轻松地将 git
用户帐户限制为仅执行与 Git 相关的活动,该工具随 Git 一起提供。如果您将其设置为 git
用户帐户的登录 shell,则该帐户将无法正常访问您的服务器。要使用此功能,请为该帐户的登录 shell 指定 git-shell
而不是 bash
或 csh
。为此,您必须首先将 git-shell
命令的完整路径添加到 /etc/shells
中(如果尚未添加)。
$ cat /etc/shells # see if git-shell is already in there. If not...
$ which git-shell # make sure git-shell is installed on your system.
$ sudo -e /etc/shells # and add the path to git-shell from last command
现在,您可以使用 chsh <username> -s <shell>
编辑用户的 shell。
$ sudo chsh git -s $(which git-shell)
现在,git
用户仍然可以使用 SSH 连接来推送和拉取 Git 存储库,但无法登录到机器。如果您尝试登录,您将看到类似于此的登录拒绝消息。
$ ssh git@gitserver
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to gitserver closed.
此时,用户仍然可以使用 SSH 端口转发来访问 git 服务器能够访问的任何主机。如果您想阻止这种情况,您可以编辑 authorized_keys
文件,并在想要限制的每个密钥之前添加以下选项:
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
结果应该如下所示:
$ cat ~/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQCB007n/ww+ouN4gSLKssMxXnBOvf9LGt4LojG6rs6h
PB09j9R/T17/x4lhJA0F3FR1rP6kYBRsWj2aThGw6HXLm9/5zytK6Ztg3RPKK+4kYjh6541N
YsnEAZuXz0jTTyAUfrtU3Z5E003C4oxOj6H0rfIF1kKI9MAQLMdpGW1GYEIgS9EzSdfd8AcC
IicTDWbqLAcU4UpkaX8KyGlLwsNuuGztobF8m72ALC/nLF6JLtPofwFBlgc+myivO7TCUSBd
LQlgMVOFq1I2uPWQOkOWQAHukEOmfjy2jctxSDBQ220ymjaNsHT4kgtZg2AYYgPqdAv8JggJ
ICUvax2T9va5 gsg-keypair
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa
AAAAB3NzaC1yc2EAAAADAQABAAABAQDEwENNMomTboYI+LJieaAY16qiXiH3wuvENhBG...
现在 Git 网络命令仍然可以正常工作,但用户将无法获取 shell。如输出所示,您还可以在 git
用户的主目录中设置一个目录,以稍微自定义 git-shell
命令。例如,您可以限制服务器接受的 Git 命令,或者您可以自定义用户尝试以这种方式 SSH 登录时看到的提示信息。运行 git help shell
获取有关自定义 shell 的更多信息。