Уничтожить неработающую сессию xrdp — пользователи xrdp не могут войти в систему.

Вопрос или проблема

пользователь не может подключиться к серверу через xrdp
тестировалось с использованием клиента удаленного рабочего стола Linux, а также клиента удаленного рабочего стола Windows

сообщение об ошибке: “ошибка: проблема с подключением”

/var/log/sesman.log 

показывает эту ошибку

[20170419-22:06:02] [INFO ] поток scp на сокете 7 успешно запущен
[20170419-22:06:02] [INFO ] ++ переподключенная сессия: имя пользователя test, 
дисплей :47.0, session_pid 2869, ip xxx.xxx.xxx.xxx:53732 - сокет: 7

поиск этого процесса

root@server:/etc/xrdp# ps -aux | grep defunct
root      2869  0.0  0.0      0     0 ?        Z    19:08   0:00 
[xrdp-sessvc] <defunct>

попытка убить процесс

kill -9 2869 

не убивает процесс

как я могу убить этот процесс?

пользователи не могут войти в то, что файл журнала говорит, что существует сессия

однако при просмотре отключенных tcp-сессий (не установленные соединения, а только прослушивающие порты) я не вижу никаких сессий, существующих для этого пользователя

это хроническая, постоянно повторяющаяся проблема, которая, похоже, не проявляется в каком-либо регулярном порядке

что я могу сделать?

перечисление всех сессий xrdp

#!/bin/bash

# найти отключенные RDP сессии

lsof -b -w -n -c /^Xvnc$/b -a -iTCP:5900-5999

не показывает отключенных сессий (все tcp-соединения установлены для всех подключенных пользователей)

xrdp ведет журнал сессий внутри файлов .xrdp*, хранимых в домашнем каталоге пользователя. Может случиться так, что некоторые файлы сессий .xrdp* будут храниться в /tmp/ или /tmp/.xrdp/. Служба xrdp создает связь с этими файловыми сессиями.
Итак, чтобы снова установить соединение, когда у вас есть неактивные процессы, у вас есть три варианта:

  • создать новое соединение, используя другое разрешение (работает как обходное решение, но я не рекомендую этого)
  • удалить файлы .vnc/sessman* из домашнего каталога затронутых пользователей, файлы xrdp* в /tmp и /tmp/.xrdp/ для затронутого пользователя и подключиться снова. (рекомендуемое решение)
  • перезапустить службу xrdp, которая очистит связь с файловыми сессиями. (рекомендуется только если вы можете позволить время простоя сессий xrdp 🙂 )

Для всех, кто столкнулся с этой проблемой: я обнаружил, что сервер xrdp хранит некоторую информацию о состоянии отключенных сессий. Даже анализ всех TCP-соединений и убийство прослушивающих, но не установленных портов не решает эту проблему (хотя это решает огромную проблему ненужного распределения ресурсов).

Я обнаружил, что не могу избавиться от зомби и заставить XRDP создать новую сессию вместо попытки переподключиться к предыдущему состоянию, не перезапустив сервер XRDP.

Единственный трюк, который я нашел, это изменить разрешение экрана клиента, чтобы обмануть сервер xrdp и заставить его думать, что это новая машина. Это позволяет подключение быть принятым и устанавливает новую сессию.

Немного запоздал, но почему это происходит, я не уверен, но мой сервер с временем работы всего 7 месяцев имел тысячи неактивных процессов xrdp. Я очищаю его с помощью “sudo systemctl restart xrdp.service”.

Можно отредактировать sesman.ini и добавить:

KillDisconnected=true #(чтобы очищать отключенных пользователей)
DisconnectedTimeLimit=60 #(или какой-то другой таймаут.... в секундах)

Это приведет к ситуации, когда вы не сможете переподключиться к последней сессии, но предотвратит мертвые сессии.

Ответ или решение

Устранение проблем с сеансами XRDP: Как избавиться от "мертвых" процессов

Проблемы с подключением к серверу через XRDP могут доставлять значительные неудобства пользователям. По вашему описанию видно, что вы сталкиваетесь с ситуацией, когда пользователи не могут войти в систему, так как в логах отображается информация о "мертвых" сеансах. В данном ответе мы подробно рассмотрим возможные решения этой проблемы и предоставим рекомендации на будущее.

Анализ ситуации

Из предоставленной информации видно, что у вас есть следующее:

  • Пользователи не могут подключиться к серверу через XRDP, а при попытке подключения возникает ошибка "error: problem connecting".
  • Логи (/var/log/sesman.log) указывают на наличие "мертвого" процесса (<defunct>), что может свидетельствовать о том, что предыдущий сеанс пользователя не был корректно завершен.
  • Попытка принудительного завершения мертвого процесса с помощью команды kill -9 не дала результатов, потому что "мертвые" процессы не могут быть убиты таким образом.

Возможные решения:

  1. Очистка временных файлов сеансов:
    Удаление .vnc/sessman* файлов из домашней директории пользователя, а также .xrdp* файлов из /tmp/ и /tmp/.xrdp/ для затронутых пользователей может помочь. Это является рекомендуемым решением, так как оно очищает информацию о старых сеансах и позволяет установить новое подключение.

    rm -rf /tmp/.xrdp/*
    rm -rf /home/username/.vnc/sessman*
  2. Перезапуск службы XRDP:
    Если вы можете позволить себе перезапустить XRDP, это также может решить проблему. Это очистит все процессы XRDP и отключенные сеансы.

    sudo systemctl restart xrdp.service
  3. Изменение разрешения экрана клиента:
    Изменение разрешения может обойти проблему временно, так как сервер будет воспринимать подключение как новое. Однако это не рекомендуется как стабильное решение, так как оно не устраняет основную проблему с "мертвыми" сеансами.

  4. Настройка параметров конфигурации sesman:
    Чтобы остановить накопление мертвых процессов в будущем, можно внести изменения в файл конфигурации sesman.ini. Добавьте следующие строки:

    KillDisconnected=true
    DisconnectedTimeLimit=60

    Это позволит автоматически завершать сеансы, которые были отключены более 60 секунд назад, что поможет избежать проблем с неактивными сеансами.

Заключение

Проблема с неработающими или "мертвыми" сеансами XRDP может быть решена различными способами, в зависимости от того, насколько быстро вы хотите ее исправить и сколько времени вы готовы выделить на обслуживание. Наилучшим подходом будет регулярная очистка временных файлов и настройка параметров конфигурации XRDP для предотвращения таких случаев в будущем. Если проблема сохраняется, необходимо будет провести более глубокий анализ системных логов и, возможно, рассмотреть возможность обновления версии XRDP или Linux, чтобы исправить известные ошибки.

Если у вас возникнут дополнительные вопросы, не стесняйтесь обращаться за поддержкой!

Оцените материал
Добавить комментарий

Капча загружается...