在过去的半年里,我每个工作日都在使用托管在 vSphere 中的这个盒子 ubuntu 16.04 盒子。我正在使用 putty/kitty 从 Windows 连接到它。今天,我收到了与此问题中类似的消息。
我不确定是什么原因造成的。这是消息:
Authenticating with public key "imported-openssh-key"
Server refused to allocate pty
Welcome to Ubuntu 16.04.4 LTS (GNU/Linux 4.4.0-116-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
0 packages can be updated.
0 updates are security updates.
我保留了打印出来的格式。
这个答案解决了这个问题,但是我必须在每次重新启动时输入命令:
mount devpts /dev/pts -t devpts
添加 fstab 行,如链接所示,也在原始问题答案之一中给出,似乎没有任何改变。
老实说,我不知道为什么直到现在我才需要安装这个设备,然后突然它停止工作,我需要这个安装。
为我解决此问题的正确方法是什么,以便我不需要在每次重新启动后手动安装它?很高兴提供您可能要求的日志或其他诊断。
更新
所以最初我通过重建盒子来解决这个问题,但现在它又发生了,它也开始发生在我管理的其他机器上。
按照菲利普的回答。
运行gzip -dc /boot/initrd.img-$(uname -r) | cpio -i --quiet --to-stdout init | grep devpts
给
mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
运行gzip -dc /boot/initrd.img-$(uname -r) | cpio -i --quiet --to-stdout scripts/init-bottom/udev | grep move
给
# move the /dev tmpfs to the rootfs
mount -n -o move /dev ${rootmnt}/dev
使用“调试”开关运行会给出此输出。
我还能做些什么来找到问题的根本原因?
重新sudo update-initramfs -c -k $(uname -r)
生成后重新生成没有产生任何可见的变化。
这是我在手动安装 devpts 前后在 mtab 中看到的内容:
>sudo cat /etc/mtab | grep devpts
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666 0 0
>sudo mount devpts /dev/pts -t devpts
>sudo cat /etc/mtab | grep devpts
devpts /dev/pts devpts rw,nosuid,noexec,relatime,mode=600,ptmxmode=000 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=666 0 0
devpts /dev/pts devpts rw,relatime,mode=600,ptmxmode=000 0 0
当我收到“服务器拒绝分配 pty”时,这是一个简单得多的问题:我的 SSH 服务器将“PermitTTY”选项设置为“否”。(在最新版本的 OpenSSH 中,该行通常被注释掉,因为“是”是默认值。所以只要不手动将其设置为“否”,你就可以了。)
使用您最喜欢的编辑器仔细检查您的 sshd_config 文件。
确保“PermitTTY”行不存在、被注释掉或手动设置为“是”,然后重新启动 SSH 服务器。
这可能就是你所需要的。
/dev/pts 文件系统通常由 Ubuntu 中的 initrd(又名 initramfs)挂载。
initramfs 是一个小文件系统,在内核启动时加载到内存中,并设置系统以切换到真正的根文件系统,在设置了基础并加载了挂载真正根所需的任何内核驱动程序之后。
您可以在 /boot 下找到它,名为 initrd.img-*,其中最后一部分与内核版本匹配。
这是一个 xz 压缩的 cpio 存档。
您可以使用以下命令查看在挂载时首次运行的“init”脚本。它末尾的“grep”查看挂载 devpts 的行:
devpts 实际上是安装在 initramfs 的根目录中,所以稍后有另一个步骤将它移动到真正的根目录,然后再切换到它。你可以在这里查看:
如果要提取 initrd 的全部内容,可以使用:
然后探索那棵树...
如果您的 initramfs 似乎有问题,您可以尝试使用以下
update-initramfs
命令重新生成它,如下所示:注意此命令输出中的任何错误,它们可能会为您提供可能出错的线索...
另一种可能性是在 initrd 中启用调试日志记录。为此,将“调试”添加到内核命令行并重新启动。然后在系统启动后查看文件 /run/initramfs/initramfs.debug,其中将包含由 initrd 脚本打印的消息。有关 initramfs 调试的更多详细信息,请参见此处。
我在https://serverfault.com/a/934030/33095遇到了类似的问题
权限与预期不同,但能够使用以下方法解决该问题: