16

Я хотел бы использовать экран, чтобы сохранить сеансы SSH на моем сервере. Было бы неплохо, если бы я мог автоматически возобновить любой запущенный сеанс для моего пользователя при входе в систему. Простой способ сделать это - добавить «screen -r» в мой .bashrc, и это, кажется, работает нормально. Мне просто интересно, сломается ли что-нибудь в условиях, которые я еще не проверял. Любой с опытом здесь, кто может сказать мне, это то, что я должен делать?

2 ответа2

19

Вам нужен 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

(Возможно, вы бы создали псевдоним оболочки или ярлык среды рабочего стола на клиенте.) Таким образом, вы можете легко отказаться от запуска экрана, указать альтернативное имя сеанса и так далее.

2

Сценарии запуска вашего X-сервера часто запускают новую оболочку, например, если вы входите в систему, используя gdm, используя "Определенный пользователем сеанс".

Я думаю, что все, что не выходит, может привести к зависанию вашего запуска X. Это будет включать screen -r .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .