github、gitlab 等服务是如何储存用户的公钥的,为每个用户都在服务器创建一个本地用户,把公钥写进.ssh 里?

2020-03-04 17:06:26 +08:00
 jry
4325 次点击
所在节点    git
27 条回复
shoaly
2020-03-04 18:00:30 +08:00
存数据库不好么, 一定要存成文件
yuanfnadi
2020-03-04 18:10:23 +08:00
https://api.github.com/users/:username/keys

这个接口可以获取每个用户的 public key.
liuguang
2020-03-04 18:45:23 +08:00
估计是实现 ssh 协议就行,不一定要搞真实 Linux 用户
jry
2020-03-04 18:45:45 +08:00
@shoaly 问题就是数据库怎么搞,ssh 协议怎么支持从数据库里获取用户。
AngryPanda
2020-03-04 18:51:41 +08:00
@jry 你以为他们没有自研能力吗
ysc3839
2020-03-04 19:03:26 +08:00
你会提这问题大概是觉得它们没有自己编写任何代码,全都是使用现成的 SSH 服务器,这样的话要实现多用户功能确实挺麻烦的。
但是实际上他们会修改甚至自己实现 SSH 服务器,自然可以对接数据库。
likexian
2020-03-04 19:29:59 +08:00
不搞开发也可以,你也可以。

OpenSSH 搜索 AuthorizedKeysCommand
lc1450
2020-03-04 19:30:06 +08:00
刚看了下自己搭建的 gitlab 它使用的是 git 用户 公钥放在.ssh/authorized_keys

其实从公钥验证就能猜出来 ssh -T git@github.com

每条前面有 command="/xxxx/bin/gitlab-shell" 参数, 这个应该是把处理权交给 gitlab-shell

这是用了和 sshd 同端口的方案, 如果专门给 git 服务开个端口, 那就直接由该 git 服务处理, 公钥想放哪就放哪儿
ipwx
2020-03-04 19:34:01 +08:00
首先,pam 支持 mysql 和 postgres 这种数据库。甚至可以自己写 pam 插件。

https://packages.ubuntu.com/source/xenial/pam-mysql
https://packages.ubuntu.com/source/xenial/pam-pgsql

其次,我觉得他们不需要用标准 SSH,自己写一个不就行了?
wuqingdzx
2020-03-04 21:12:44 +08:00
怎么感觉这帖子里回帖的有些人阴阳怪气的,知道就回答人家,不知道就闭嘴呗,冷嘲热讽的。v2 什么时候风气变这样了
j0hnj
2020-03-04 21:18:12 +08:00
@wuqingdzx #10 恕我直言,我没有发现楼上有冷嘲热讽的啊?是不是你太敏感了?
lululau
2020-03-04 21:40:17 +08:00
gitlab 开源的。。。看代码不就知道了。。。
forcecharlie
2020-03-04 23:37:49 +08:00
数据库 keys 表 我们平台 git ssh 服务&鉴权全是我写的
forcecharlie
2020-03-04 23:47:49 +08:00
数据库 keys 表 ,可以使用 golang 或者 libssh 编写 ssh 服务。这要比 openssh authorized_keys ( gitlab 这点做得不行)方案好一些。

具体就是在 ssh 请求 publickey 交互的时候获得用户的 publickey 计算指纹去数据库查。(通常会走 API )

PS:我们平台 git ssh 服务&鉴权全是我写的
https://forcemz.net/git/2019/10/01/ExploreSomeIssuesWithGitHost/
ShareDuck
2020-03-05 02:08:04 +08:00
@wuqingdzx 不不不,这才是 V2 的风气。
reus
2020-03-05 08:20:33 +08:00
@wuqingdzx 那你怎么不闭嘴,你怎么又在热讽?对人对己,标准一致不好吗?
alphatoad
2020-03-05 08:56:37 +08:00
Libssh/libssh2,很好用
这个规模的公司,还有全球 scale 的需求,不会用现成的实现的
julyclyde
2020-03-05 10:39:20 +08:00
gitlab 是:
所有 git 用户共用同一个 ssh 用户
authorized_keys 里,每一行 key 都指定 command,在 command 参数里写上 git 用户的名字
julyclyde
2020-03-05 10:40:54 +08:00
其实上面大部分回答,并不觉得阴阳怪气啊
只是回答的并不是 gitlab 实际的情况而已;脱离 gitlab 这个语境的话,都可以算是可行的做法
imkerberos
2020-03-05 10:43:33 +08:00
PAM 插件即可,不一定需要真实用户。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/649838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX