Я хотел бы использовать экран, чтобы сохранить сеансы SSH на моем сервере. Было бы неплохо, если бы я мог автоматически возобновить любой запущенный сеанс для моего пользователя при входе в систему. Простой способ сделать это - добавить «screen -r» в мой .bashrc, и это, кажется, работает нормально. Мне просто интересно, сломается ли что-нибудь в условиях, которые я еще не проверял. Любой с опытом здесь, кто может сказать мне, это то, что я должен делать?
2 ответа
Вам нужен screen -R -d
чтобы автоматически присоединиться к существующему сеансу, если таковой существует, и создать сеанс в противном случае.
Убедитесь, что вы делаете это только на интерактивных оболочках. Исходники Bash ~/.bashrc
даже для неинтерактивных оболочек, когда его родительский процесс - rshd или sshd (это упоминается в документации, но его легко пропустить). Вы можете сказать, что оболочка является интерактивной, потому что $-
содержит i
.
case $- in
*i*) screen -Rd;;
esac
Это не позволяет легко запускать разные сеансы экрана в разных терминалах.
Вам нужно отсоединиться от экрана, а затем выйти из родительской оболочки, чтобы выйти из системы. Это можно решить с помощью exec screen
вместо screen
.
Если вы запустите оболочку, отличную от оболочки входа в систему, вы попадете на экран, а это не то, что вам нужно в большинстве случаев. Я бы по крайней мере ограничил это тем, что вы работаете непосредственно в интерактивном ssh-сеансе, например, в вашем ~/.bash_profile
что-то вроде следующего:
case "/$(ps -p $PPID -o comm=)" in
*/sshd) screen -R -d;;
esac
Будьте осторожны, когда вы делаете сложные вещи с вашим .bashrc
как ошибка, которая приводит к выходу оболочки, затруднит вход в систему.
Я рекомендую не изменять файлы инициализации оболочки на сервере, а вместо этого запускать экран явно из клиента, как в
ssh -t host.example.com screen -R -d
(Возможно, вы бы создали псевдоним оболочки или ярлык среды рабочего стола на клиенте.) Таким образом, вы можете легко отказаться от запуска экрана, указать альтернативное имя сеанса и так далее.
Сценарии запуска вашего X-сервера часто запускают новую оболочку, например, если вы входите в систему, используя gdm, используя "Определенный пользователем сеанс".
Я думаю, что все, что не выходит, может привести к зависанию вашего запуска X. Это будет включать screen -r
.