Я хотел бы настроить SSH и экран таким образом, чтобы при входе в систему всегда использовался экранный сеанс. В идеале, эта сессия не будет прекращаться, но будет отключена, когда я нажму Cd. Как этого достичь? И какие еще полезные настройки существуют для облегчения моей SSH-жизни?
ssh
gnu-screen
Тобиас Кинцлер
источник
источник
У меня есть следующее .bash_profile на моих удаленных серверах:
Это делает две вещи: во-первых, устанавливает функцию оболочки для замены оболочки и переноса соединения ssh-agent, во-вторых, она вызывает функцию после паузы в течение нескольких секунд (если вы не хотите, чтобы экран запускался).
Первое
if
предложение будет истинным, если еще не запущенный screen (-z "${STY}"
) подключен к терминалу (-t 0
), а я не запускаю sudo (который иногда не меняется$USER
).reattach
Функция будет сначала проверить , если SSH был вызван с портом SSH-агент активным (-n "${SSH_AUTH_SOCK}"
). Затем он заменит все, что находится в~/.ssh/agent-script
текущем активном файле сокета, и заменит переменную среды ($SSH_AUTH_SOCK
) новым значением. Затем скрипт заменит текущую оболочку однимscreen
сеансом (убедившись, что должен существовать только один). Все аргументыreattach
функции передаются в команду (${1:+"$@"}
).Последняя часть сначала удаляет все мертвые сессии (
screen -wipe
), сообщает пользователю (мне), что экран скоро запустится, и вместо этого может вернуться в оболочку, нажав Ctrl- C. Затем он ждет 5 секунд и вызываетreattach
функцию.источник
Во-первых, если вы используете byobu, вы можете настроить новый сеанс оболочки, чтобы всегда автоматически запускать byobu (что, по сути, является хорошей конфигурацией экрана, хотя более новые версии могут использовать tmux в качестве бэкэнда). Если вы действительно не хотите byobu, вы можете настроить экран для подключения вручную, отредактировав свой
.profile
или другой скрипт конфигурации оболочки вexec screen
ifTERM != "screen"
.Если вам это не нравится, вы можете использовать
authorized_keys
файл для запуска определенной команды для соединений с определенным ключом (и вы можете иметь столько ключей, сколько захотите). Смотритеman sshd
подробности. Я бы посоветовал вам заставить команду запустить скрипт, который проверяет, работает ли экран и подключается, или же запускает новый сеанс.Что касается отключения на Ctrl-D, экран позволяет вам настроить сопоставления клавиш в вашем
.screenrc
. Смотритеman screen
подробности. Вы ищете "Bindkey".источник
Может быть, совершенно не имеет отношения к вашему вопросу, но вы когда-нибудь задумывались об использовании TMUX вместо этого. Он выполняет множество функций, которые вы ищете из коробки.
Например. если вы отключаетесь от сеанса SSH, когда находитесь под TMUX, все, что вам нужно сделать, это вернуться по ssh и запустить «tmux a», чтобы подключиться к вашему сеансу. Так как я начал использовать TMUX, я забыл, что такое команды nohup / disown ... если вам нужно что-то запустить и выйти из системы - запустите его внутри tmux и отсоедините. Вывод команды будет буферизован, поэтому вы можете просмотреть его позже.
для автоматического присоединения вы можете добавить что-то похожее на .bashrc:
или даже проще
Он имеет меньший объем памяти и в целом ИМХО гораздо лучше / проще в использовании.
Ярлык meta-d является отображением по умолчанию для отключения в TMUX.
источник
screen -dAr default || screen -AS default
работает для меня. Я добавляю это к моему ~ / .bashrc .Кратко объясняя переключатели:
d
- Отсоедините экран, если он все еще подключен, от другого сеанса.A
- Адаптируйте окна на экране к новому размеру терминала.r default
- Прикрепить к экрану под названием по умолчанию.Если первая экранная команда (предыдущая
||
) не выполняется, запускается вторая:A
- Как объяснено выше ...S default
- Создайте новый сеанс экрана с именем по умолчанию .источник
Я предлагаю использовать Бёбу . Этот инструмент использует tmux и предоставляет хорошую панель инструментов и другие удобные средства переключения окон, горячие клавиши и т. Д.
С помощью приведенных выше команд после успешного входа в систему по SSH попытайтесь подключиться к существующему сеансу byobu-tmux, в противном случае он создаст новый сеанс.
источник