介绍
本教程将向您展示如何使用 SSH 密钥进行身份验证来设置成熟的 Git 服务器。 它没有 Web 界面,这仅涉及安装 Git 和设置对它的访问。 我们将使用主机“git.droplet.com”代替您将用于 VPS 的域。
如果您想在工作时保持代码的私密性,这可能是一个不错的选择。 虽然开源往往是现状,但有时您不希望免费提供您的代码。 例如,如果您正在开发移动应用程序,尤其是付费应用程序。 请记住,只要知道用于克隆的 URL 地址,任何人都可以读取此代码,但前提是他们知道。
许多人主要关心一个问题,那就是存储库的 Web 界面。 GitHub 在这方面做得非常好。 您可以安装一些应用程序,例如 Gitosis、GitList 和 Goblet。 我们不会在本教程中详细介绍这些内容,但如果您严重依赖图形界面,那么您可能需要查看这些内容并考虑在安装完 Git 服务器后立即安装其中一个。
创建 SSH 密钥对
首先,我们需要生成一个 SSH 密钥对。 如果您使用的是 Mac 或 Linux,您可以简单地在终端中发出以下命令,但将电子邮件地址替换为您自己的:
ssh-keygen -C "youremail@mailprovider.com" Generating public/private rsa key pair. Enter file in which to save the key (/home/flynn/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in foo_rsa. Your public key has been saved in foo_rsa.pub. The key fingerprint is: ab:cd:ef:01:23:45:67:89:0a:bc:de:f0:12:34:56:78 flynn@en.com The key's randomart image is: +--[ RSA 2048]----+ | o+-+ .. | | E o | | . ++.o.. | | o o H . | | . . = | | . =o.o= | | o . | | . | | = o . | +-----------------+
我强烈建议在密钥文件上设置密码,这是一层安全性,影响非常小。 如果您使用的是基于 Windows 的操作系统,则有一些工具可用于生成密钥对,例如 PuTTY Gen,但它确实带有免责声明,您需要在使用它之前查看当地法律,因为某些国家/地区已禁止使用它。 如果不是这种情况,您可以登录您的 VPS,创建密钥对,然后下载 id_rsa 和 id_rsa.pub 供您使用。
接下来,VPS 将需要一个专门用于 Git 的用户。 大多数人会简单地创建一个名为“Git”的用户,这就是我们将在本教程中所做的,但您可以随意命名这个用户。
设置 Git 用户并在您的 VPS 上安装 Git
登录您的 VPS,并获得 root*:
su -
- 有些人以这种方式使用 root 感到不舒服。 如果您的 VPS 设置为使用 sudo,请执行此操作。
添加 Unix 用户(不一定是 Git 用户名)来处理存储库:
useradd git
然后给你的 Git 用户一个密码:
passwd git
现在很简单:
- CentOS/Fedora:
yum install git
- Ubuntu/Debian:
apt-get install git
将您的 SSH 密钥添加到访问列表
此时,您需要以 Git 用户身份登录。 如果您尚未登录该用户,请使用以下命令切换到该用户:
su git
现在您需要将 id_rsa.pub 文件上传到 Git 用户的主目录。 完成后,我们需要让 SSH 守护进程知道要接受哪些 SSH 密钥。 这是使用授权密钥文件完成的,它位于点文件夹“ssh”中。 要创建它,请输入:
mkdir ~/.ssh && touch ~/.ssh/authorized_keys
注意:在命令中使用双 '&' 将它们链接起来,因此它告诉系统执行第一个命令,然后执行第二个命令。 在路径开头使用“波浪号”将告诉系统使用您的主目录,因此“~”在您的 VPS 中变为 /home/git/。
我们将使用“cat”命令,它将获取文件的内容并将它们返回到命令行。 然后我们使用 '>>' 修饰符对该输出做一些事情,而不是仅仅在你的控制台中打印它。 请注意这一点,因为单个“>”将覆盖您指定的第二个文件的所有内容。 双 '>' 将追加它,因此请确保您知道自己想要做什么,并且在大多数情况下,使用“>>”会更容易,这样您就可以随时删除您追加的内容,而不是寻找恢复您的内容捣碎。
此文件中的每一行都是您希望访问此帐户的密钥的条目。 要添加您刚刚上传的密钥,请键入以下内容,替换:
cat .ssh/id_rsa.pub | ssh user@123.45.56.78 "cat >> ~/.ssh/authorized_keys"
现在,如果您在授权的密钥文件上使用 cat,您可以在那里看到密钥:
cat ~/.ssh/authorized_keys
如果您想将其他人添加到您的访问列表中,他们只需向您提供他们的 id_rsa.pub 密钥并将其附加到授权密钥文件中。
设置本地存储库
这是一个非常简单的过程,您只需调用 Git 命令并在您想要的任何目录中初始化一个裸存储库。 假设我想使用“我的项目”作为项目标题。 创建文件夹时,我会使用全部小写,用连字符替换任何空格,并将“.git”附加到名称中。 所以“我的项目”变成了“my-project.git”。
将该文件夹创建为空的 Git 存储库:
git init --bare my-project.git
就是这样! 您现在在您的 VPS 上设置了一个 Git 存储库。 让我们继续讨论如何在本地计算机上使用它。
从本地计算机使用 Git 服务器
在 Linux 或 Mac OS 上,您需要将远程源更改为新创建的服务器。 如果您已经有要推送到服务器的本地存储库,请使用以下命令更改远程:
git remote set-url origin git@git.droplet.com:my-project.git
如果这是您正在设置的新存储库,请使用:
git init && git remote add origin git@git.droplet.com:my-project.git
现在您可以添加、推送、拉取甚至克隆,因为您知道您的代码只能由您自己访问。
但是,如果您希望一些受信任的人可以访问此服务器,并且您希望通过按用户名对他们进行排序来保持简单,该怎么办? 一个简单有效的方法是创建一个以每个人命名的文件夹,因此在您的 Git 用户列表的主文件夹中,输入:
mkdir user1 user2
现在,当您指定远程存储库时,它将如下所示:
git remote add origin git@git.droplet.com:user1/user-project.git