解决方法:

解决方法:

我们的一台 Ubuntu 14.04 生产服务器停止接受 SSH 连接。当我们尝试登录时,我们得到了 SSH 横幅文本,但随后它就挂起了。如果我们使用管理控制台登录,我们可以在 /var/log/auth.log 中看到以下错误消息

Oct  4 17:37:20 servername sshd[10975]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key
Oct  4 17:37:21 servername sshd[10975]: Accepted publickey for username from 10.0.0.1 port 57230 ssh2: RSA xx:xx:xx:xx
Oct  4 17:37:21 servername sshd[10975]: pam_unix(sshd:session): session opened for user username by (uid=0)
Oct  4 17:37:25 servername sshd[10975]: error: openpty: No such file or directory
Oct  4 17:37:25 servername sshd[6869]: error: session_pty_req: session 0 alloc failed

使用cat /proc/mounts| grep devpts; ls -hal /dev/{pts,ptmx}我可以验证它是否存在并且具有正确的权限,并且不存在任何磁盘/inode 问题:

devpts /dev/pts devpts rw,nosuid,noexec,relatime,mode=600,ptmxmode=000 0 0

crw-rw-rw- 1 root tty  5, 2 Oct  4 17:01 /dev/ptmx

/dev/pts:
total 0
drwxr-xr-x  2 root root       0 Aug 14 00:52 .
drwxr-xr-x 17 root root    4.3K Oct  4 17:01 ..
crw--w----  1 root tty  136, 18 Oct  4 17:41 18
crw--w----  1 root tty  136, 24 Oct  1 13:57 24
crw--w----  1 root tty  136,  3 Oct  4 17:39 3
crw--w----  1 root tty  136, 30 Oct  4 11:29 30
c---------  1 root root   5,  2 Aug 14 00:52 ptmx

df -h
    Filesystem      Size  Used Avail Use% Mounted on
    udev            252G  4.0K  252G   1% /dev
    tmpfs            51G   53M   51G   1% /run
    /dev/sdi2       220G   13G  197G   6% /
    none            4.0K     0  4.0K   0% /sys/fs/cgroup
    none            5.0M     0  5.0M   0% /run/lock
    none            252G   12K  252G   1% /run/shm
    none            100M     0  100M   0% /run/user
    /dev/sdi1        75M   512   75M   1% /boot/efi
    /dev/md1        3.5T  282G  3.0T   9% /ssd

df -hi
    Filesystem     Inodes IUsed IFree IUse% Mounted on
    udev              63M   526   63M    1% /dev
    tmpfs             63M   725   63M    1% /run
    /dev/sdi2         14M  171K   14M    2% /
    none              63M     2   63M    1% /sys/fs/cgroup
    none              63M     1   63M    1% /run/lock
    none              63M     4   63M    1% /run/shm
    none              63M     4   63M    1% /run/user
    /dev/sdi1           0     0     0     - /boot/efi
    /dev/md1         224M    46  224M    1% /ssd

我还验证了 sshd_config 与另一台服务器匹配,并重新启动了 ssh 服务。我相信 devpty 系统是在启动时安装的,但是有没有办法在不重新启动服务器的情况下解决问题?

我懂了https://access.redhat.com/solutions/67972RedHat 上对此问题有一个未经验证的解决方案,但我无法访问 RedHat 订阅。

答案1

我发现我可以使用以下方法使非基于 tty 的 ssh 会话正常工作:

$ ssh username@servername /bin/bash -i

bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
username@servername:~$ 

我认为在这种情况下 ioctl 错误是可以预料到的,因为我正在启动一个没有 tty 的交互式会话。此会话中有很多问题(TERM 环境变量甚至没有设置),但我能够进行一些基本的故障排除并发现:

#View a process list with parent process details
ps -axfo pid,uname,cmd | grep badservice | wc -l
27917

基本上,当我们将我们的一个服务与好的服务器进行比较时,我们发现有超过 27900 个进程以其用户名运行

$ salt 'server*' cmd.run 'ps -aux | grep badservice | wc -l'
server.good:
    3
server.bad:
    27918

这很可能导致了与 ptys 相关的某种资源耗尽。停止了有问题的服务,我使用 终止了该用户的所有剩余进程sudo kill -u badservice。之后,SSH 又开始按预期工作了!

答案2

我检查了另一台正在运行的服务器,发现挂载选项有点不同:

Bad Server:  devpts /dev/pts devpts rw,nosuid,noexec,relatime,mode=600,ptmxmode=000 0 0
Good Server: devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0

我尝试了以下操作,可以更改挂载权限以匹配良好的服务器:

sudo mount -o remount /dev/pts
sudo grep devpts /proc/mounts

devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0

但是我尝试连接时仍然遇到相同的错误(即使再次重新启动 ssh 后)。

答案3

我遇到了同样的问题,这是由于我将 /dev 挂载--rbind到我想要chroot进入的另一台机器的目录中造成的。

mkdir -p /media/snapshot/
mkdir -p /media/test/
mount /dev/vg0/snapshot /media/snapshot/
mount /dev/vg0/test /media/test/
mount -t proc none /media/test/proc
mount --rbind /dev /media/test/dev
mount -t sysfs sysfs /media/test/sys
chroot /media/test/ /bin/bash
exit

这些文件夹被挂载:

udev on /media/test/dev type devtmpfs (rw,nosuid,relatime,size=346156k,nr_inodes=86539,mode=755)
devpts on /media/test/dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /media/test/dev/shm type tmpfs (rw,nosuid,nodev)
mqueue on /media/test/dev/mqueue type mqueue (rw,relatime)

卸载卷时(表明该卷仍在使用),使用此选项,-l/dev 内的其他挂载点也将被卸载:

umount -l /media/test
ll /dev/pts
total 0
drwxr-xr-x  2 root root   40 Mai 13 07:06 .
drwxr-xr-x 18 root root 4,1K Mai 13 07:07 ..

解决方法:

重新启动服务器并重新创建所有 /dev 挂载

解决方案:

--bind代替,--rbind则不会发生问题:

mount --bind /dev /media/test/dev

相关内容