搜索

首页  >  问答  >  正文

自己公司搭建的git服务器,是不是每个开发者都要把自己的SSH key放到服务器上?

  1. 如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来?

  2. 如果在git服务器上新建个仓库,其他人想向上提交代码,需要他们把自己的ssh key加进来么?

  3. 为什么以前在github上向别人的仓库贡献代码时不用在别人的github上加自己的ssh key,团队其他小伙伴向我仓库贡献代码也没加过他们ssh key

淡淡烟草味淡淡烟草味2761 天前1021

全部回复(8)我来回复

  • ringa_lee

    ringa_lee2017-05-02 09:53:28

    清水寺?
    报出河畔ID来。

    <----------爱国敬业诚信友善的分割线---------->

    1. 如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来?
    2. 如果在git服务器上新建个仓库,其他人想向上提交代码,需要他们把自己的ssh key加进来么?
    3. 为什么以前在github上向别人的仓库贡献代码时不用在别人的github上加自己的ssh key,团队其他小伙伴向我仓库贡献代码也没加过他们ssh key

    服务端存储SSH公钥,只不过是为了做免密码登陆,push等系列操作,或者说,用来认证,(每次连接的时候都需要你提供私钥进行认证,虽然这个过程你看不到)。

    如果服务端不存储公钥,当然也可以认证。那么要回答你的问题就简单了:

    1. 不是。Git有两种传输协议,SSH,http。使用SSH传输,需要把公钥加到服务端,做免密码登陆(push操作等)。使用http(https)传输,通过修改netrc,可以做到免密码登陆(push等操作)。

    2. 不是。同1.

    3. 很正常,原因同1.

    评论区有人质疑通过http协议操作git仓库是我自己瞎想出来的,贴几张图:

    这是gogs

    gitlab

    oschina

    github

    kernel.org

    git源码对http的支持

    <-----------富强民主文明和谐的分割线----------->

    当然你的问题很有可能是另外一个问题:

    公司自家搭了git服务器,如果要每个人都能使用,是不是要把公司每个开发者的ssh key加进来?如果不需要,那么怎么搞才能让每个人都有权限登陆gitlab?

    答:

    1. 不需要

    2. ldap统一认证。

    在统一登陆(认证)的组件中,ldap是使用的最多的认证服务端。各种*nix的系统一登录,包括libpam、nslcd(登陆linux系统)、sudo权限、gitlab(gogs)、wiki、项目管理、teambition、各种门禁等都会涉及到,甚至可以说,凡是你能搜集到的(开源的)适用范围为集团内部的应用,基本都要支持ldap统一登录。

    <-------------自由平等公正法治的分割线-------------------->

    统一登录,基本大点的网站都会涉及到,例如github.com需要认证才能登陆gist.github.com。细节被github隐藏,因此你从外面看不到。

    但是有一种你肯定接触过:OAuth认证。比如下图:QQ登陆酷狗音乐。

    市面上的统一认证绝大多数遵循OAuth协议,也有很多是内部自己的实现,例如淘宝.com和aliyun.com的账号密码互通。

    至于内部系统的统一认证,则是另一套协议:ldap。

    市面上几乎所有的内部系统,都有一套自己的权限系统,包括:注册,登陆,找回密码,但是同时,他们几乎都提支持另外一套权限系统:LDAP。

    设想一下,新用户到公司,需要先到gitlab注册一个账号,然后上传密钥,登陆服务器时需要管理员帮忙创建新账号,登陆第二台服务器,需要管理员帮忙创建新账号,登陆各种内网系统,需要管理员帮忙创建新账号……

    所以,下面这些项目需要LDAP:

    gitlab

    jenkins

    使用ldap统一管理可以ssh到主机上的用户(配置教程):

    gogs的ldap认证:

    其他不找了,可以这么说,凡是可以在企业内部部署的应用,包括teambition等闭源应用,基本都支持ldap认证。

    (以上对SSO和统一认证的描述有误,经依云提醒,已经修改。)

    回复
    0
  • 世界只因有你

    世界只因有你2017-05-02 09:53:28

    1. 是啊。不然你怎么做鉴权呢?当然你可以用 HTTPS,或者自己造轮子。如果你不打算把事情搞复杂的话,走最常规的 ssh + key 登陆,是没有别的办法的。

    2. 鉴权是针对用户的,不是针对仓库的。授权才需要针对仓库(或者你可以精确到分支)

    3. 因为 github 已经知道你是谁了啊(鉴权完成了)。接下来只要那个仓库的管理员向你授权推送权限就可以了。不过 github 上合作很多是通过 pull request 的方式,管理员逐个接受的。仓库默认任何人都有权提交 pull request 的。

    结论你需要 gitlab,或者 gitolite。前者是 Ruby 写的,带 Web 界面(像 GitHub),后者是 Perl 写的,仅仅是仓库管理本身(只管理 git 仓库,没有界面)。

    鉴权,又叫身份验证,是识别用户是谁的过程。授权,是判断这个用户是否有权力做某件事的过程。它们不是一体的。

    回复
    0
  • 滿天的星座

    滿天的星座2017-05-02 09:53:28

    1. 需要每个账号把自己的ssh key加进来

    2. 已经把ssh key加到自己账户里面的账号,向git服务器提交代码不需要再加进来,但需要有该项目的git权限。

    3. 你在github上贡献代码时,已经把自己的账号的ssh key加进去了吧,要不你也不能push代码。

    综上,ssh + git 的远程代码提交方式是基于ssh协议完成的,每个拥有本地gitlab服务器账号的人都需要将个人电脑的ssh key加到gitlab上的账号里面,这样才能验证该人 clone 和 push 的账号。另外,gitlab上的一个项目,是需要设置权限的,private项目,具有如下角色:Guest, Reporter, Developer, Master。
    最后,如果你想在同一台电脑里面同时配置 github 和 gitlab 的 ssh key,可以参考 一台电脑存放多个git账户的多个rsa秘钥

    回复
    0
  • phpcn_u1582

    phpcn_u15822017-05-02 09:53:28

    我们公司就是这样的,将本地的ssh key 上传到服务器就可以推送git 了

    回复
    0
  • 巴扎黑

    巴扎黑2017-05-02 09:53:28

    如果你是直接只安装了git,或者还安装了gitweb,这都不能很好的实现权限控制。
    你可以在服务器安装gogs,通过它来进行权限控制。
    不建议使用ssh key,因为权限应该是对人的,而不是对机器的。

    回复
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-05-02 09:53:28

    为了实现鉴权。

    回复
    0
  • PHPz

    PHPz2017-05-02 09:53:28

    一般的git服务器都有自己项目管理人员权限 和key没有关系 key只是解除认证

    回复
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:53:28

    如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来?
    如果在git服务器上新建个仓库,其他人想向上提交代码,需要他们把自己的ssh key加进来么?

    为什么以前在github上向别人的仓库贡献代码时不用在别人的github上加自己的ssh key,团队其他小伙伴向我仓库贡献代码也没加过他们ssh key

    看你服务器用的什么软件,github向别人代码仓库贡献代码也是fork再提pull request,认证是github做了。
    你给github提代码的时候就已经给个ssh key了。

    第二个问题就depends 了

    如果人特别多,不想把他们的ssh key(公钥)都加进来,服务器可以给一个组加一个,然后组内的开发者通用共同的私钥。

    回复
    0
  • 取消回复