自己公司搭建的git服务器,是不是每个开发者都要把自己的SSH key放到服务器上?
淡淡烟草味
淡淡烟草味 2017-05-02 09:51:28
0
8
1043
  1. 如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来?

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

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

淡淡烟草味
淡淡烟草味

全部回复(8)
左手右手慢动作

清水寺?
报出河畔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和统一认证的描述有误,经依云提醒,已经修改。)

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

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

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

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

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

滿天的星座
  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秘钥

phpcn_u1582

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

巴扎黑

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

曾经蜡笔没有小新

为了实现鉴权。

PHPzhong

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

给我你的怀抱

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

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

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

第二个问题就depends 了

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板