为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

像海泡石这样的程序是如何工作的?我很好奇像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实现我想要的吗?
查看完整描述

3 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

海泡石本身就是一种授权层,它不需要ssh。
它只需要知道正在调用它,以便授权或不授权该人执行git命令。

SSH用于身份验证(但您也可以使用http Apache进行身份验证)

海泡石由ssh命名的方式在“海泡石和石英石“,并使用ssh机制。强制命令:


这个~/.ssh/authorized_keys(在gitite ssh服务器上)如下所示:

command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gitolite-shell usertwo",[more options] ssh-rsa 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 print_version {
    chomp( my $hn = `hostname -s 2>/dev/null || hostname` );
    my $gv = substr( `git --version`, 12 );
    $ENV{GL_USER} or _die "GL_USER not set";
    print "hello $ENV{GL_USER}, this is " . ($ENV{USER} || "httpd") . "\@$hn running gitolite3 " . version() . " on git $gv\n";
}

这条信息看起来是:

hello admin, this is git@server running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4


查看完整回答
反对 回复 2019-06-24
?
MYYA

TA贡献1868条经验 获得超4个赞

请注意,sshd对~/.ssh/Authorted_Key文件进行线性扫描。一旦你在里面得到了大约3000个密钥,那些密钥出现在文件后面的人就会开始注意到延迟-它开始超过网络延迟:-)

这就是为什么GitHub有自己的SSHD补丁版本的原因之一。他们有太多的用户能够管理正常的SSHD!


查看完整回答
反对 回复 2019-06-24
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

基本步骤是:

  1. 检查试图登录的人的公钥
  2. 将公钥映射到访问控制列表。

换句话说,要使这些事情起作用,您必须从用户那里获取公钥,然后生成一个列表(文件、数据库等),该列表将密钥与用户和权限配对。


查看完整回答
反对 回复 2019-06-24
  • 3 回答
  • 0 关注
  • 545 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信