gitolite:PTY分配请求失败通道0上(gitolite: PTY allocation re

2019-07-29 03:52发布

无论詹金斯(词服务器)和我的git仓库托管在同一台服务器上。 git的回购协议是由gitolite控制。 如果我从外面访问该存储库,例如从我的工作站我得到

ssh git@arrakis

PTY allocation request failed on channel 0
hello simou, this is git@arrakis running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4

 R W    testing
Connection to arrakis closed.

这是罚款,我想(除了PTY ...警告)

现在回服务器,我想詹金斯能够连接到我的git仓库为好。

jenkins@arrakis:~> ssh git@arrakis
gitolite: PTY allocation request failed on channel 0

登录到阿莱克斯作为用户的git(在gitolite用户):

git@arrakis:~> cat ~git/.ssh/authorized_keys

command="/home/git/gitServer/gitolite/src/gitolite-shell jenkins",no-port-forwarding,no-x11-forwarding,no-agent-forwarding,no-pty ssh-rsa <PUBLIC-KEY> jenkins@arrakis

“无PTY”条目让我怀疑,所以我从authorized_keys中删除,并再次尝试:

jenkins@arrakis:~> ssh git@arrakis
hello jenkins, this is git@arrakis running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4

 R W    testing
Connection to arrakis closed.

这解决了我的问题,在这一点上,但我不知道要消除“无终端”的后果。

为什么它只会影响本地访问,因为远程访问似乎完全不受到影响?


openSUSE的11.4(x86_64的)VERSION = 11.4代号=青瓷

Answer 1:

在您的工作站和服务器之间的性能差异可能是由于使用不同版本的OpenSSH客户端(的ssh每个系统(非远程与本地)上)。 除非客户端将从服务器请求pty -T给定,或RequestTTY配置选项设置为no (后者是第一个可用OpenSSH中5.9)。 在行为产生差异的客户如何应对有此请求被服务器拒绝(例如,由于no-pty在给定的应用authorized_keys条目):

  • OpenSSH的5.6之前:
    • 客户机将显示“PTY分配请求失败”的消息,并
    • 继续在“无PTY”模式
  • 在OpenSSH的5.6-5.8:
    • 客户机将显示“PTY分配请求失败”的消息,并
    • 中止连接
  • 在OpenSSH的5.9(或更高版本):
    • 客户机将显示“PTY分配请求失败”的消息,并
    • 如果-t未给,并RequestTTYauto (默认值),然后
      • 继续在“无PTY”模式
    • 其他( -t给予,或RequestTTY配置选项是yesforce
      • 中止连接

由于服务器的ssh出现时,其PTY分配请求被拒绝中止,它可能运行OpenSSH 5.6〜5.8(至少在客户端二进制)。 同样,由于您的工作站的ssh显示警告,但会继续,这可能是从5.6之前运行的OpenSSH,或一个是5.9或更高版本的。 您可以检查版本的ssh -V

您可以通过使用始终给予阻止行为的差异-T选项,以便在客户端(任何版本)从来没有从服务器请求一个PTY:

ssh -T git@YourServer

在实际的Git访问,客户端永远不会试图分配一个pty,因为Git会给予客户特定的命令来运行(如ssh server git-upload-pack path/to/repository ),而不是要求一个“互动”环节(如ssh server )。 换句话说, no-pty不应该造成实际的Git访问的问题; 它不仅影响你的验证测试(取决于你正在运行的OpenSSH客户端的版本),因为缺少一个命令参数会导致一个隐含的pty分配请求(为“互动”会议)。


从OpenSSH的5.6发布公告 :

  • 杀频道时PTY分配请求失败。 如果服务器拒绝PTY分配(BZ#1698)固定卡客户

bz#1698似乎是一个参考记录在“便携式OpenSSH的” Bugzilla的报告 。


从办理登机手续的消息OpenSSH的clientloop.c修订版1.234 :

提高我们的行为时,TTY分配失败:如果我们在RequestTTY =自动模式(默认),则不要在TTY分配错误致命对待,而是刚刚恢复本地TTY熟模式,并继续进行。 这是从来没有分配的TTY设备更加优美。

如果RequestTTY设置为“是”或“力”,然后失败分配一个TTY是致命的。



Answer 2:

要知道为什么它只影响本地访问,您将需要调试它像本文中 。

ssh -vvv git@arrakis

如果你/etc/ssh/sshd_config SSH守护程序配置文件包含(取消注释)线SyslogFacility AUTHPRIV ,你可以在看一下你的SSH登录/var/log/secure

话虽这么说,看看GitoliteV3 :我不认为它采用no-pty的当前设置。



Answer 3:

除了克里斯·约翰森非常完整的答案。注意,明确地给出了info的命令将不会显示PTY警告:

ssh git@arrakis info

在这种情况下,SSH认为,这不是一个交互式会话,并不会要求一个TTY。



文章来源: gitolite: PTY allocation request failed on channel 0
标签: gitolite