在自动执行部署脚本时,您可以使用 SSH 代理转发、HTTPS 结合 OAuth 令牌、部署密钥或机器用户来管理服务器上的 SSH 密钥。
SSH 代理转发
在许多情况下,尤其是在项目开始时,SSH 代理转发是最快和最简单的方法。 代理转发与本地开发计算机使用相同的 SSH 密钥。
优点
- 无需生成或跟踪任何新密钥。
- 没有密钥管理;用户在服务器上具有与本地相同的权限。
- 服务器上没有存储密钥,因此,万一服务器受到破坏,您不需要搜索并删除泄露的密钥。
缺点
- 用户必须通过 SSH 进行部署;不能使用自动部署过程。
- 对于 Windows 用户来说,使用 SSH 代理转发可能比较麻烦。
设置
- 在本地开启代理转发。 更多信息请参阅我们的 SSH 代理转发指南。
- 将部署脚本设置为使用代理转发。 例如,在 bash 脚本中,启用代理转发如下所示:
ssh -A serverA 'bash -s' < deploy.sh
使用 OAuth 令牌进行 HTTPS 克隆
如果不想使用 SSH 密钥,您可以使用 HTTPS 结合 OAuth 令牌。
优点
-
有权访问服务器的任何人都可以部署仓库。
-
用户不必更改其本地 SSH 设置。
-
不需要多个令牌(每个用户一个);每个服务器一个令牌就足够了。
-
令牌可随时撤销,本质上变成一次性密码。
-
可以使用 OAuth API 轻松编写生成新令牌的脚本。
缺点
- 必须确保使用正确的访问范围配置令牌。
- 令牌本质上是密码,必须以同样的方式进行保护。
设置
请参阅使用令牌的 Git 自动化指南。
部署密钥
您可以使用部署密钥从 GitHub Enterprise Server 仓库启动项目到服务器,部署密钥是授予访问单个仓库的 SSH 密钥。 GitHub Enterprise Server 将密钥的公共部分直接附加到仓库而不是个人用户帐户,密钥的私有部分仍保留在服务器上。 更多信息请参阅“交付部署”。
具有写入权限的部署键可以执行与具有管理员权限的组织成员或个人仓库上的协作者相同的操作。 更多信息请参阅“组织的仓库权限级别”和“用户帐户仓库的权限级别”。
优点
- 有权访问仓库和服务器的任何人都能够部署项目。
- 用户不必更改其本地 SSH 设置。
- 默认情况下,部署密钥是只读的,但在将它们添加到仓库时,您可以授予其写入权限。
缺点
- 部署密钥只授予对单个仓库的访问权限。 较复杂的项目可能要将多个仓库拉取到同一服务器。
- 部署密钥通常不受密码保护,因此在服务器遭到破坏时可轻松访问密钥。
设置
- 在服务器上运行
ssh-keygen
进程,并记住保存生成的公共/私有 RSA 密钥对的位置。 - 在 GitHub Enterprise Server 的右上角,单击您的个人资料照片,然后单击 Your profile(您的个人资料)。
- 在个人资料页面上,单击 Repositories(仓库),然后单击仓库的名称。
- 在仓库中,单击 Settings(设置)。
- 在边栏中,单击 Deploy Keys(部署密钥),然后单击 Add deploy key(添加部署密钥)。
- 提供标题,粘贴到公钥中。
- 如果希望此密钥拥有对仓库的写入权限,请选择 Allow write access(允许写入权限)。 具有写入权限的部署密钥允许将部署推送到仓库。
- 单击 Add key(添加密钥)。
在一台服务器上使用多个仓库
如果在一台服务器上使用多个仓库,则需要为每个仓库生成专用密钥对。 不能对多个仓库重复使用一个部署密钥。
在服务器的 SSH 配置文件(通常为 ~/.ssh/config
)中,为每个仓库添加一个别名条目。 例如:
Host my-GHE-hostname.com-repo-0
Hostname my-GHE-hostname.com
IdentityFile=/home/user/.ssh/repo-0_deploy_key
Host my-GHE-hostname.com-repo-1
Hostname my-GHE-hostname.com
IdentityFile=/home/user/.ssh/repo-1_deploy_key
Host my-GHE-hostname.com-repo-0
- The repository's alias.Hostname my-GHE-hostname.com
- Configures the hostname to use with the alias.IdentityFile=/home/user/.ssh/repo-0_deploy_key
- Assigns a private key to the alias.
然后可以使用主机名的别名通过 SSH 与仓库进行交互,SSH 将使用分配给该别名的唯一部署密钥。 例如:
$ git clone git@my-GHE-hostname.com-repo-1:OWNER/repo-1.git
机器用户
如果您的服务器需要访问多个仓库,您可以创建一个新的 GitHub Enterprise Server 帐户并附加一个专用于自动化的 SSH 密钥。 由于此 GitHub Enterprise Server 帐户不会被人类使用,因此称为机器用户。 您可以将机器用户添加为个人仓库上的协作者(授予读取和写入权限)、添加为组织仓库上的外部协作者(授予读取、写入或管理员权限)或添加到对需要自动化的仓库具有访问权限的团队(授予团队权限)。
优点
- 有权访问仓库和服务器的任何人都能够部署项目。
- 没有(人类)用户需要更改其本地 SSH 设置。
- 不需要多个密钥;每台服务器一个就足够了。
缺点
- 只有组织才能将机器用户限制为只读访问。 个人仓库始终授予协作者读取/写入权限。
- 机器用户密钥(如部署密钥)通常不受密码保护。
设置
- 在服务器上运行
ssh-keygen
进程,并将公钥附加到机器用户帐户。 - 授予机器用户帐户访问要自动化的仓库的权限。 为此,您可以将帐户添加为协作者、添加为外部协作者或添加到组织中的团队。