如何修复请求在通道0上失败


76

当我想这样连接到我的服务器时

ssh -a username@my-server.de -p 22

它给了我两个错误信息:

PTY allocation request failed on channel 0
shell request failed on channel 0

当我使用参数时-T,第一条错误消息消失了。但是,如何解决第二个问题呢?我无法连接。我可以连接到其他服务器,没有任何问题。

我使用的是MAC OS 10.9。

该参数-v向我显示此调试输出:

OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to xxx.your-server.de [188.40.3.15] port 22.
debug1: Connection established.
debug1: identity file /Users/xxx/.ssh/id_rsa type -1
debug1: identity file /Users/xxx/.ssh/id_rsa-cert type -1
debug1: identity file /Users/xxx/.ssh/id_dsa type -1
debug1: identity file /Users/xxx/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
debug1: Remote protocol version 2.0, remote software version mod_sftp/0.9.8
debug1: no match: mod_sftp/0.9.8
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: RSA 55:f5:ca:ca:01:45:0f:7b:71:0a:1f:ba:9e:25:17:fb
debug1: Host 'xxx.your-server.de' is known and matches the RSA host key.
debug1: Found key in /Users/xxx/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Trying private key: /Users/xxx/.ssh/id_rsa
debug1: Trying private key: /Users/xxx/.ssh/id_dsa
debug1: Next authentication method: password

输入密码后,我得到以下信息:

debug1: Authentication succeeded (password).
Authenticated to xxx.your-server.de ([xxx.xxx.3.15]:22).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LANG = de_DE.UTF-8
shell request failed on channel 0

4
客户端正在请求与TTY的Shell会话,而服务器正在拒绝它。服务器未向客户端提供拒绝请求的详细原因。您需要在服务器而不是客户端上解决此问题。
肯斯特,2014年

谢谢您的回答。没错,服务器不提供此请求。我不知道ho找出问题所在。我之前读过其他一些文章,但与我的问题不完全匹配。有人可以给我一些提示吗?
user1895268

2
尝试ssh [-neccessary options] /bin/bash -i。这可能会提供来自服务器端的更有用的错误消息(例如“权限被拒绝”或“分段错误”)
Hans Lub 2014年

9
debug1: Remote protocol version 2.0, remote software version mod_sftp/0.9.8行表示远程服务器为proftpd + mod_sftp,并且mod_sftp模块不实施/不支持Shell请求,仅实施SFTP / SCP。因此shell request failed错误。
Castaglia '16

当服务器是詹金斯服务器时,它仅支持有限的命令集,而不支持外壳程序。因此,当给出一个可接受的命令(如“ help”)时,它也会以“ shell 0通道上的外壳请求失败”作为响应,它可以正常工作。
UV

Answers:


24

PTY分配请求在通道0上失败

系统上最多只能有256个伪终端。也许您的应用程序泄漏了伪终端。采用

lsof /dev/pts/*

看看哪些进程有开放的伪终端

外壳请求在通道0上失败

我收到此错误(没有PTY分配错误)。事实证明,我的一个应用程序(QtCreator 3.0。?)正在泄漏Zombie进程。其他用户可以登录,因此我可能已经达到了每个用户进程的配额(如果有这种情况)。我已经更新到QtCreator 3.3。到现在为止还挺好。


如何在Windows上检查我的远程计算机是linux,但是我在使用GitBash的Windows计算机上使用ssh连接到此远程计算机。如何在Windows上执行此命令
Hana90'5

1
OP说他们在MacOS上。该解决方案旨在在MacOS上运行吗?当我尝试(MacOS 10.15.5)时,得到了:lsof: status error on /dev/pts/*: No such file or directory
杰里米

23

卸下并安装/dev/pts对我有用

umount /dev/pts

mount devpts /dev/pts -t devpts

参考:http : //www.iitk.ac.in/LDP/LDP/lfs/5.0/html/chapter06/proc.html


当能够通过ssh登录时,“ umount”将不起作用,因为该设备正在使用中。
轻松逗乐史蒂芬(Steven the Easy),

1
我当时正在使用命名空间,并且希望将ssh插入在单独的命名空间中运行的chroot监狱。我遇到了同样的错误,但mount devpts /dev/pts -t devpts为我成功了。
Phoenix87

补充一点,这是在服务器上,而不是在客户端上
somenxavier

它对我有用。
钱陈

7

我尝试通过ssh连接到服务器时遇到了完全相同的错误。如我所见,您正在使用由Hetzner提供的服务器,该服务器通过端口22连接到该服务器:

debug1:连接到xxx.your-server.de [188.40.3.15]端口22。

Hetzner的官方Wiki /文档说:

服务器/计算机(控制台)的加密远程诊断协议。使用的SSH端口为222。

因此,您必须通过端口222连接:

ssh -p 222 username@my-server.de

6

我与我们的一个用户(仅用于ssh端口转发)解决了类似的问题,因此他不需要访问PTY,.ssh / authorized_keys文件中禁止了该用户:

no-pty ssh-rsa AAA...nUB9 someuser

因此,当您尝试登录该用户时,只有消息

PTY allocation request failed on channel 0

被退回。因此,请检查用户的authorized_keys文件。


4

只需将这些行添加到/etc/mtab和中/etc/fstab,然后重新启动系统。

none    /dev/pts    devpts    defaults    0    0

1
这工作了。在实时CD上,您还可以执行以下操作:$ mount -t devpts none / target / dev / pts; chroot / target
Michael Galaxy

如果我使用Git bash连接到AWS服务器,则出现此问题。我应该从Program Files的Git bash主目录中修改这些文件吗?

有用的提示:您可以运行命令而不登录并分配pty,例如ssh root@example.com '/sbin/reboot'
Robert Calhoun16年

57
但是这段代码是做什么的。您应该提供一个解释
Tristan

1
我们执行了此操作(更改fstab和mtab并重新启动),并且它工作了一段时间。显然是重新启动解决了该问题,现在我们怀疑远程计算机的资源不足。
轻松逗乐的史蒂文(Steven the Emusly Amused)

4

尝试这个:

vi /etc/security/limits.d/20-nproc.conf
*          soft    nproc     4096   # change to 65535 
root       soft    nproc     unlimited

4

刚刚发现,我的情况是什么问题(提供者策略):最后,我在输出“通道0上的shell请求失败”时遇到了同样的问题。

我必须使用主密码以及Web域名作为登录名。(用德语www.wunschname.de,其中,wunschname是您的网址。)

使用sftp用户名和相应密码的ssh登录失败。(尽管scp和sftp可以与这些sftp用户一起使用!)



1

从AWS控制台重新启动实例对我有用。某项服务正在泄漏lsof有助于查找的文件连接。


1

shell request failed on channel 0

表示您没有外壳程序或远程命令访问权限,修复了您对服务器的用户权限以具有外壳程序访问权限,或者您只想隧道使用-N-T选项


2
将会是一个很棒的例子..:D
DavidNoreña18年

1

我也面临同样的问题。只需重新启动服务器即可解决此问题。


1

这就是提供各种答案对我的帮助。

  • 尝试以root身份登录,这将在大多数情况下为您带来帮助
  • 尝试以其他用户身份登录,成功,这意味着问题出在特定的帐户上,这意味着问题帐户已经启动了某些进程,这些进程正在消耗资源,导致无法登录(很可能没有进程) )
  • 如上面xmduhan所述,增加/etc/security/limits.d/20-nproc.conf中的限制
  • 再次尝试ssh,它应该可以工作

0

重新安装/ dev / pts对我有用。如果对受影响的计算机运行ssh,则可以通过ssh远程执行此操作。ssh在运行类似这样的命令时不会请求tty,因此这将允许您远程重新安装/ dev / pts

ssh user @ host-'挂载-o重新挂载,rw / dev / pts'


1
还给我mount: only root can use "--options" option。好吧,我没有root特权。
Boooooooooms

0

在启动虚拟机时,有时会看到这种情况。我们的自动化系统开始应用更新,因此取决于时间,可以对关键软件包进行更新。

Upshot-如果在目标计算机上更新ssh或其他相关软件包,则可能会发生这种情况。


0

我在使用git bash时遇到此错误。我能够通过为Windows重新安装git来解决此问题。此答案中有更多详细信息。


0

如果某人在尝试ssh进入NetGear ReadyNAS设备时发现自己正在阅读此QA ,请确保在管理界面中ssh服务的对话框中选中“仅rsync”复选框。


0

ssh -t git@github.com将本地用户的公共密钥添加到github后尝试使用sudo时,就会发生这种情况

像我这样的Google快乐的人要谨小慎微



0

尝试使用-NT选项

ssh -NT ...


3
为什么?您可以添加长期价值的解释,以及对可能遇到类似问题的未来访客的帮助吗?
SherylHohman

0

就我而言,SFTP服务器将拒绝您的SSH连接。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.