Как эффективно использовать экран и SSH?

Обновления для Соляриса, 11 Экспрессов только доступны при покупке контракта на поддержку. Нет никаких бесплатных обновлений в это время, таким образом регистрирование не поможет там.

Информация о версии, которую страница загрузки говорит Вам читать перед установкой, предупреждает Вас о проблеме пароля root с истекшим сроком.

12
24.09.2012, 16:21
6 ответов

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

Добавьте следующее к ~/.bashrc для Ваших учетных записей пользователей:

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ] 
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  screen -RR -S main || echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

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

9
27.01.2020, 19:55
  • 1
    я просто хотел добавить, что сочетание клавиш CTRL-d является стандартным на экране для отсоединения от рабочей экранной сессии. –  Daemon of Chaos 02.10.2012, 18:37

У меня есть следующее в моем .bash_profile на моих удаленных серверах:

if [ -z "${STY}" -a -t 0 -a X${USER} = Xarcege ]; then
    reattach() {
        if [ -n "${SSH_AUTH_SOCK}" ]; then
            ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-script"
            SSH_AUTH_SOCK="${HOME}/.ssh/agent-script" export SSH_AUTH_SOCK
        fi
        exec screen -A -D -RR ${1:+"$@"}
    }
    screen -wipe
    echo 'starting screen... (type Ctrl-C to abort)'
    sleep 5 && reattach
fi

Это делает две вещи: во-первых, настраивает функцию оболочки, чтобы заменить оболочку и продвинуть соединение ssh-агента, второе, это вызывает функцию после приостановки в течение нескольких секунд (в случае, если Вы не хотите, чтобы экран запустился).

Первое if пункт будет верен, не уже выполнив экран (-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 функция.

8
27.01.2020, 19:55

Во-первых при использовании byobu, можно настроить новую сессию оболочки к всегда, автоматически запускают byobu (который является по существу хорошей экранной конфигурацией, хотя более новые версии могут использовать tmux в качестве бэкенда). Если Вы действительно не хотите byobu затем, можно, вероятно, установить экран для соединения вручную путем редактирования Вашего .profile или другая оболочка конфигурирует сценарий к exec screen если TERM != "screen".

Если Вам не нравится это, можно использовать authorized_keys файл для выполнения определенной команды для соединений с определенным ключом (и у Вас может быть столько ключей, сколько Вам нравится). Посмотрите man sshd для деталей. Я предложил бы, чтобы Вы заставили команду запустить скрипт, который проверяет, выполняет ли экран и соединяет или иначе запускает новую сессию.

Что касается разъединения на Ctrl-D, экран позволяет Вам настраивать ключевые отображения в Вашем .screenrc. Посмотрите man screen для деталей. Вы ищете "bindkey".

4
27.01.2020, 19:55

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

Например, если Вы разъединяетесь от сессии SSH, когда Вы находитесь под TMUX, все, что необходимо сделать, к ssh назад и выполнен "tmux" для присоединения к сессии. Так как я начал использовать TMUX, я забыл то, чем команды nohup/disown состоят... в том, если необходимо работать, что-то и выход из системы - выполняют его внутри tmux и отсоединение. Вывод команды будет буферизован, таким образом, можно будет рассмотреть его позже.

присоединить автоматически Вас может добавить что-то как ниже к .bashrc:

[ -z $TMUX ] && tmux list-sessions 2>/dev/null && tmux a

или еще легче

tmux a 2>/dev/null

Это имеет более низкий объем потребляемой памяти и в целом по моему скромному мнению, намного лучший/легче для использования опции.

meta-d ярлык является значением по умолчанию, отображающимся для отсоединения в TMUX.

2
27.01.2020, 19:55

screen -dAr default || screen -AS default работы для меня. Я добавляю это к своему ~/.bashrc.

Кратко объяснение переключателей:

  • d - Отсоедините экран, если он все еще присоединен от другой сессии.
  • A - Адаптируйте окна на экране к новому терминальному размеру.
  • r default - Присоедините к экрану, названному значением по умолчанию.

Если первая экранная команда (та прежде ||) не успешно выполняется, второй выполняется:

  • A - Как объяснено выше...
  • S default - Создайте новую экранную сессию со значение по умолчанию имени.
0
27.01.2020, 19:55

Я предлагаю использовать byobu . Этот инструмент использует tmux и предоставляет красивую панель инструментов и другие удобные средства переключения окон, горячие клавиши и т. Д.

echo "new-session" >> ~/.byobu/.tmux.conf
echo "if [ -n '\$TMUX' ]; then :; else byobu attach; fi" >> ~/.bashrc

С помощью этих вышеуказанных команд после успешного входа в систему по SSH система пытается подключиться к существующему сеансу byobu-tmux, в противном случае он создаст новый сеанс.

0
27.01.2020, 19:55

Теги

Похожие вопросы