Как указала @varta, владельцы mosh очень против присоединения от разных клиентов по соображениям безопасности. Так что, если ваш клиент ушел (например, вы перезапустили свой ноутбук), ваш единственный вариант - убить сессии.
Чтобы убить только отдельные сеансы, вы можете использовать следующую строку (которая у меня есть в качестве псевдонима в моем .bashrc
).
who | grep -v 'via mosh' | grep -oP '(?<=mosh \[)(\d+)(?=\])' | xargs kill
Эта команда зависит от того факта, что who
списки подключенных пользователей, включая сеансы mosh, только присоединенные сеансы mosh имеют «через mosh», и что для сеансов mosh pid указан в квадратных скобках. Таким образом, он находит pids только для отдельных сеансов mosh и передает их для уничтожения с помощью xargs.
Вот пример who
результата для справки:
$ who
theuser pts/32 2018-01-03 08:39 (17X.XX.248.9 via mosh [193891])
theuser pts/17 2018-01-03 08:31 (17X.XX.248.9 via mosh [187483])
theuser pts/21 2018-01-02 18:52 (mosh [205286])
theuser pts/44 2017-12-21 13:58 (:1001.0)
Альтернативой является использование переменной окружения mosh-server MOSH_SERVER_SIGNAL_TMOUT
. Вы можете установить что-то вроде 300 в вашем .bashrc
на стороне сервера . Тогда, если вы сделаете a, pkill -SIGUSER1 mosh-server
он убьет только те mosh-серверы, которые не были подключены за последние 300 секунд (остальные будут игнорировать SIGUSER1). Больше информации на странице руководства mosh-сервера . Я использую команду выше, потому что после псевдонима это кажется мне проще.
Обратите внимание, как упоминало @Annihilannic, если вы используете tmux / screen в своих сеансах mosh, то эти сеансы tmux / screen все еще существуют после того, как вы завершите сеансы mosh. Таким образом, вы все равно можете присоединиться к ним (так что вы действительно не много теряете, убивая сами сеансы mosh).