CentOS Stream 8: SSH X11 ForwardingでX11を使わないコマンドがハングする問題

29日 7月 2021

サーバ側にopenssh-server、xorg-x11-xauth、x11-dbusがインストールされている状態で、クライアント側からsshに-Xか-Yオプションを指定すると、X11を使わないコマンドがハングする問題の回避策について記載する。

1 問題

  • sshで-Xや-Yオプションを指定しつつ、X11を使わないコマンドを実行すると、コマンド実行後にSSHのセッションが切れずにハングする。

$ ssh -Y lxd-centos-8-ssh-x11.hiroom2.com — uname -aWarning: No xauth data; using fake authentication data for X11 forwarding.Linux lxd-centos-8-ssh-x11 5.10.52-1-lts #1 SMP Tue, 20 Jul 2021 16:46:09+0000 x86_64 x86_64 x86_64 GNU/Linux(hang)

2 原因

  • dbus-x11が/etc/profile.d/ssh-x-forwarding.shを含めるようになっており、sshで接続する度にこのシェルスクリプトが実行される。

$ rpm -ql dbus-x11/etc/X11/xinit/xinitrc.d/00-start-message-bus.sh/etc/profile.d/ssh-x-forwarding.csh/etc/profile.d/ssh-x-forwarding.sh/usr/bin/dbus-launch/usr/lib/.build-id/usr/lib/.build-id/4b/usr/lib/.build-id/4b/439e4019de8f19a66c1b6676d47dd121f684f3/usr/share/man/man1/dbus-launch.1.gz

  • sshで-Yか-Xオプションが指定された場合、/etc/profile.d/ssh-x-forwarding.shは dbus-launch –exit-with-x11を実行する。
  • dbus-launch –exit-with-x11は、X11を使ったコマンドの終了時にdbus-launchを終了させるが、X11を使わないコマンドの終了時にはdbus-launchを終了させない。この残ったdbus-launchがSSHのコネクションが閉じずにハングする原因となる。

$ cat /etc/profile.d/ssh-x-forwarding.sh# DBus session bus over SSH with X11 forwarding[ -z “$SSH_CONNECTION” ] && return[ -z “$DISPLAY” ] && return[ “$SHLVL” -gt 1 ] && returnGDK_BACKEND=x11; export GDK_BACKENDeval $(dbus-launch –sh-syntax –exit-with-x11)

3 回避策

  • /etc/profile.d/ssh-x-forwarding.shを無効にする。
  • D-Busが必要な場合はsshコマンド側でdbus-launchを実行するようにする (/etc/profile.d/ssh-x-forwarding.shが追加される前と同様の方法)。

#!/bin/shsudo dnf install -y openssh-server xorg-x11-xauth dbus-x11sudo systemctl enable sshdsudo systemctl start sshdfirewall-cmd –add-service=ssh –permanentfirewall-cmd –reloadsudo mv /etc/profile.d/ssh-x-forwarding.sh /etc/profile.d/ssh-x-forwarding.sh.disabled

4 参考

]]> tagPlaceholderカテゴリ: ssh, ja, centos-8, d-bus

Android | Linux | SDL - Narrow Escape