codecamp

GitHub 关于 SSH 认证中心

通过 SSH 认证中心,组织或企业帐户可提供 SSH 证书,供成员用来通过 Git 访问您的资源。

SSH 认证中心支持可用于 GitHub Enterprise Cloud 和 GitHub Enterprise Server 2.19+。 更多信息请参阅“GitHub's products”。

SSH 证书是一种机制:一个 SSH 密钥对另一个 SSH 密钥签名。 如果使用 SSH 认证中心 (CA) 为组织成员提供已签名的 SSH 证书,您可以将 CA 添加到企业帐户或组织,以便组织成员使用其证书访问组织资源。 更多信息请参阅“管理组织的 SSH 认证中心”。

在将 SSH CA 添加到组织或企业帐户后,您可以使用 CA 为组织成员签名客户 SSH 证书。 组织成员可以使用已签名的证书通过 Git 访问组织的仓库(并且只访问您组织的仓库)。 您可能需要该成员使用 SSH 证书访问组织资源。 更多信息请参阅“为企业帐户中的组织实施安全设置”。

例如,您可以构建内部系统,每天早上向开发者颁发新证书。 每个开发者可以使用其每日证书处理组织在 GitHub 上的仓库。 在一天结束时,证书会自动到期,以保护仓库,避免证书以后被窃取。

在颁发每个证书时,必须包含扩展,以指定证书用于哪个 GitHub 用户。 例如,您可以使用 OpenSSH 的 ssh-keygen 命令,将 KEY-IDENTITY 替换为密钥标识,USERNAME 替换为 GitHub 用户名:

$ ssh-keygen -s ./ca-key -I KEY-IDENTITY -O extension:login@github.com=USERNAME ./user-key.pub

要为在 GitHub Enterprise Server 和 GitHub Enterprise Cloud 上具有不同用户名的人颁发证书,可以包括两个登录扩展。

$ ssh-keygen -s ./ca-key -I KEY-IDENTITY -O extension:login@github.com=CLOUD-USERNAME extension:login@HOSTNAME=SERVER-USERNAME ./user-key.pub

您可以使用 source-address 扩展来限制组织成员用来访问组织资源的 IP 地址。 扩展接受采用 CIDR 表示法的特定 IP 地址或一个 IP 地址范围。 您可以指定多个地址或范围,用逗号分隔值。 更多信息请参阅维基百科上的“无类别域间路由”。

$ ssh-keygen -s ./ca-key -I KEY-IDENTITY -O extension:login@github.com=USERNAME -O source-address=COMMA-SEPARATED-LIST-OF-IP-ADDRESSES-OR-RANGES ./user-key.pub

即使您实施了 SAML 单点登录,组织成员也可使用其签名的证书进行身份验证。 除非您将 SSH 证书设为要求,组织成员可继续使用其他验证方式通过 Git 访问组织的资源,包括他们的用户名和密码、个人访问令牌及其自己的 SSH 密钥。

为防止身份验证错误,组织成员应使用包含组织 ID 的特殊 URL,以使用签名证书克隆仓库。 对仓库具有读取权限的任何人都可在仓库页面上找到此 URL。 更多信息请参阅“克隆仓库”。

GitHub 关于双重身份验证和 SAML 单点登录
GitHub 管理组织的 SSH 认证中心
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }