Heim > Fragen und Antworten > Hauptteil
如题,公司自家搭了git服务器,是不是要把公司每个开发者的ssh key加进来?
如果在git服务器上新建个仓库,其他人想向上提交代码,需要他们把自己的ssh key加进来么?
为什么以前在github上向别人的仓库贡献代码时不用在别人的github上加自己的ssh key,团队其他小伙伴向我仓库贡献代码也没加过他们ssh key
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等系列操作,或者说,用来认证,(每次连接的时候都需要你提供私钥进行认证,虽然这个过程你看不到)。
如果服务端不存储公钥,当然也可以认证。那么要回答你的问题就简单了:
不是。Git有两种传输协议,SSH,http。使用SSH传输,需要把公钥加到服务端,做免密码登陆(push操作等)。使用http(https)传输,通过修改netrc,可以做到免密码登陆(push等操作)。
不是。同1.
很正常,原因同1.
评论区有人质疑通过http协议操作git仓库是我自己瞎想出来的,贴几张图:
这是gogs
gitlab
oschina
github
kernel.org
git源码对http的支持
<-----------富强民主文明和谐的分割线----------->
当然你的问题很有可能是另外一个问题:
公司自家搭了git服务器,如果要每个人都能使用,是不是要把公司每个开发者的ssh key加进来?如果不需要,那么怎么搞才能让每个人都有权限登陆gitlab?
答:
不需要
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和统一认证的描述有误,经依云提醒,已经修改。)
世界只因有你2017-05-02 09:53:28
是啊。不然你怎么做鉴权呢?当然你可以用 HTTPS,或者自己造轮子。如果你不打算把事情搞复杂的话,走最常规的 ssh + key 登陆,是没有别的办法的。
鉴权是针对用户的,不是针对仓库的。授权才需要针对仓库(或者你可以精确到分支)
因为 github 已经知道你是谁了啊(鉴权完成了)。接下来只要那个仓库的管理员向你授权推送权限就可以了。不过 github 上合作很多是通过 pull request 的方式,管理员逐个接受的。仓库默认任何人都有权提交 pull request 的。
结论你需要 gitlab,或者 gitolite。前者是 Ruby 写的,带 Web 界面(像 GitHub),后者是 Perl 写的,仅仅是仓库管理本身(只管理 git 仓库,没有界面)。
鉴权,又叫身份验证,是识别用户是谁的过程。授权,是判断这个用户是否有权力做某件事的过程。它们不是一体的。
滿天的星座2017-05-02 09:53:28
需要每个账号把自己的ssh key加进来
已经把ssh key加到自己账户里面的账号,向git服务器提交代码不需要再加进来,但需要有该项目的git权限。
你在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秘钥
巴扎黑2017-05-02 09:53:28
如果你是直接只安装了git,或者还安装了gitweb,这都不能很好的实现权限控制。
你可以在服务器安装gogs,通过它来进行权限控制。
不建议使用ssh key,因为权限应该是对人的,而不是对机器的。
给我你的怀抱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(公钥)都加进来,服务器可以给一个组加一个,然后组内的开发者通用共同的私钥。