猿问

像海泡石这样的程序是如何工作的?

像海泡石这样的程序是如何工作的?

我很好奇像gitellite这样的程序是如何工作的-特别是它们如何与SSH协议交互,从而提供量身定制的体验。有人能给我举个例子,说明我如何完成以下这些任务,以及在哪里可以了解到更多关于这个主题的知识?

→ ssh git@github.com
PTY allocation request failed on channel 0
Hi <username>! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.

一个附带的问题:我的主要语言是JavaScript。有可能用NodeJS实现我想要的吗?


侃侃无极
浏览 546回答 3
3回答

一只斗牛犬

海泡石本身就是一种授权层,它不需要ssh。它只需要知道谁正在调用它,以便授权或不授权该人执行git命令。SSH用于身份验证(但您也可以使用http Apache进行身份验证)海泡石由ssh命名的方式在“海泡石和石英石“,并使用ssh机制。强制命令:这个~/.ssh/authorized_keys(在gitite ssh服务器上)如下所示:command="[path]/gitolite-shell&nbsp;sitaram",[more&nbsp;options]&nbsp;ssh-rsa&nbsp;AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t... command="[path]/gitolite-shell&nbsp;usertwo",[more&nbsp;options]&nbsp;ssh-rsa&nbsp;AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...首先,它会发现该文件中的哪个公钥与传入的登录名匹配。一旦找到火柴,它将运行该行上的命令。例如,如果我登录,它就会运行[path]/gitolite-shell sitaram.所以首先要注意的是,这样的用户没有获得“shell访问”,这是很好的!(强制命令=没有交互式shell会话*它只会提供一个限制壳,只执行一个脚本,始终相同)但是,在运行命令之前,sshd设置一个环境变量,称为SSH_ORIGINAL_COMMAND,其中包含实际的git您的工作站发出的命令。如果您没有command=在授权的密钥文件中。什么时候gitolite-shell获取控件时,它将查看第一个参数(“sitaram", "usertwo“,等等)以确定您是谁。然后查看SSH_ORIGINAL_COMMAND变量来查找要访问的存储库,以及您是在读还是写。现在它已经请求的用户、存储库和访问(读/写),gitite查看其配置文件,并允许或拒绝请求。事实上authorized_keys调用Perl脚本(gitolite-shell)是因为Gitite是用Perl编写的。它很可能调用javascript程序。如果您在GitHub上的ssh没有任何命令,您就会收到一条问候语,就像您在问题中提到的那样。Gitite显示类似的消息,详见print_version()的功能info命令脚本:sub&nbsp;print_version&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;chomp(&nbsp;my&nbsp;$hn&nbsp;=&nbsp;`hostname&nbsp;-s&nbsp;2>/dev/null&nbsp;||&nbsp;hostname`&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;my&nbsp;$gv&nbsp;=&nbsp;substr(&nbsp;`git&nbsp;--version`,&nbsp;12&nbsp;); &nbsp;&nbsp;&nbsp;&nbsp;$ENV{GL_USER}&nbsp;or&nbsp;_die&nbsp;"GL_USER&nbsp;not&nbsp;set"; &nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;"hello&nbsp;$ENV{GL_USER},&nbsp;this&nbsp;is&nbsp;"&nbsp;.&nbsp;($ENV{USER}&nbsp;||&nbsp;"httpd")&nbsp;.&nbsp;"\@$hn&nbsp;running&nbsp;gitolite3&nbsp;"&nbsp;.&nbsp;version()&nbsp;.&nbsp;"&nbsp;on&nbsp;git&nbsp;$gv\n"; }这条信息看起来是:hello&nbsp;admin,&nbsp;this&nbsp;is&nbsp;git@server&nbsp;running&nbsp;gitolite3&nbsp;v3.0-12-ge0ed141&nbsp;on&nbsp;git&nbsp;1.7.3.4

MYYA

请注意,sshd对~/.ssh/Authorted_Key文件进行线性扫描。一旦你在里面得到了大约3000个密钥,那些密钥出现在文件后面的人就会开始注意到延迟-它开始超过网络延迟:-)这就是为什么GitHub有自己的SSHD补丁版本的原因之一。他们有太多的用户能够管理正常的SSHD!

缥缈止盈

基本步骤是:检查试图登录的人的公钥将公钥映射到访问控制列表。换句话说,要使这些事情起作用,您必须从用户那里获取公钥,然后生成一个列表(文件、数据库等),该列表将密钥与用户和权限配对。
随时随地看视频慕课网APP
我要回答