vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
На старости лет, наконец, научился запускать screen в detached mode
В смысле чтобы он сразу в бэкграунд уходил а потом можно было подцепиться и посмотреть что он там делает.
screen -d -m команда

Осталось собраться и прикрутить это к какому-нибудь стартап-скрипту.

Теперь бы еще ключиком -x выучиться пользоваться.

И поигтаться с
ssh-agent screen -D -m команда


(потому что -D и -d это разные вещи, равно как -r, -R и -RR).

Вот бродит у меня мысль что кнопка открытия окна терминала по умолчанию должна запускать не просто shell, а

screen -x -p +


Это правда не спасет от того, что по завершению сеанса LXDE накроется агент.

Date: 2020-02-14 03:54 pm (UTC)
b00_dc: (Default)
From: [personal profile] b00_dc
Скрином давно пользоваться перестал, но если он, как tmux, может демоном стартовать - запускать его из .profile, а сеансы tty/эмуляторов потом цеплять (автоматом или вручную) к сессии демона. Типа такого:
# Autostart tmux on login
__autostart_tmux() {
    #TMUX_BIN="$( whereis tmux | cut -d " " -f 2 )"
    # which versions different output format
    TMUX_BIN="$( which tmux 2> /dev/null )"
    if [ -z "${TMUX_BIN}" ]; then
        echo "Tmux not found"
        return 0
    fi

    TMUX_AS_SESS_NAME="$(echo "${USER}" | cut -c '1-3')"
    # return empty line if specified session exist or return 1
    TMUX_AS_SESS_RUN="$( tmux has-session -t "${TMUX_AS_SESS_NAME}" &> /dev/null || echo "$?" )"
    #TMUX_AS_DAEMON_MODE="$1" # $1 == "-d" or " "
    #TMUX_AS_EXIT="$2" # "return 0" or "exit 0"

    # do not attach automatically to tmux session if login on local XTerm
    if [ -z "${TMUX_AS_SESS_RUN}" ] && [ -z "${SSH_TTY}" ] && [ "${TERM}" = "xterm" ]; then
        echo "Tmux: running, not attached on local XTerm"
        return 0
    # do not run tmux automatically in another tmux (or screen)
    # in exists tmux session shell be started on non-login mode and .profile not used
    # (see set -g default-command "${SHELL}" in tmux.conf)
    elif [ -n "${TMUX}" ] || [ "${TERM}" = "screen" -o "${TERM}" = "screen-256color" ]; then
        echo 'Tmux: not be running in another terminal multiplexer "'${TERM}'"'
        return 0
    # attach to existed tmux session or create it and exit login-shell; or print error message
    else
        ((tmux has-session -t "${TMUX_AS_SESS_NAME}" && exec tmux attach-session -t "${TMUX_AS_SESS_NAME}") || (tmux new-session -d -s "${TMUX_AS_SESS_NAME}" && exec tmux attach-session -t "${TMUX_AS_SESS_NAME}")) && exit 0;
        echo "Tmux: autostart failed: $?"
    fi
}

Date: 2020-02-14 07:34 pm (UTC)
From: [personal profile] legolegs
Так профиль любой логин-шелл должен подцеплять, даже если он графический оболочк, а не текстовый.

Date: 2020-02-15 04:50 pm (UTC)
From: [personal profile] legolegs
А откуда ж они PATH берут и как вообще живут? Или /etc/profile они читают, а ~/.profile нет?

Date: 2020-02-15 06:30 pm (UTC)
filin: (Default)
From: [personal profile] filin
Или из ~/.xsession

Date: 2020-02-14 03:59 pm (UTC)
filin: (Default)
From: [personal profile] filin
С ssh-агентом получается такая фигня: первый, который запускает screen, свои переменные туда пробросит. После детача он завершится. Второй уже не доставит ничего внутрь скрина.

Поэтому когда я занялся этой задачей (Linux Deploy, ходим через VX Connectbot, и оно отваливается при каждой смене внешней сети, хотя ходит на localhost), пришлось писать в ~/bin подмену для ssh, scp, git, git-is-clean и собственно screen.

У screen перед запуском настоящего запускается нечто, что прикапывает переменные агента (а заодно и DISPLAY), а у остальных запускается вот это вот прикопанное.

Date: 2020-02-14 07:41 pm (UTC)
filin: (Default)
From: [personal profile] filin
Я запускаю с -D -RR. Ну, мне интерактивно, да.

Что будет, если запускать с -m, это более внимательно смотреть надо.

Date: 2020-02-15 07:25 am (UTC)
filin: (Default)
From: [personal profile] filin
Смотрел. Там как раз обертки, причем под другими именами.

В результате без ручного запуска агента никакие гиты не работают.

termux, благо, не отваливается после перехода в другую сеть.

Date: 2020-02-15 10:03 am (UTC)
filin: (Default)
From: [personal profile] filin
> Вот поэтому как раз -D -m вариант - запускаем в бэкграунде screen СО СВОИМ агентом, и он там живет. Вместе с ключами. А мы к нему периодически коннектимся.

Так. Поскольку оно не форкается, то агент не завершает работу, пока ее не завершил screen. Но... это не бэкграунд, поскольку он не завершается. То есть недостаток в том, что нельзя выходить из той сессии, где оно запущено. Когда это автоматизированная система, которая запускает что-то долгоиграющее, и ты можешь подцепиться и посмотреть, во что оно там играет. Но запуск из интерактивной сессии чреват боком. Как минимум, сверху нужен nohup. Ну и да, прежде чем оно сможет воспользоваться агентом, надо ключи ему отдать. Внутри запущенной команды. И если они парольные, то сначала подцепиться и сказать пароль.

> разницу между -D -RR и -x -p +

Не запутаться бы... Я на локальной машине обычно не запускаю screen, потому что часто запускаю его на удаленной при заходе на нее по ssh с локальной. А два слоя screen изрядно неудобны в плане управления.

Иногда так приходилось делать с планшета (где вышеупомянутые Linux Deploy и VX Connectbot, и screen локально). Оттуда удобно заходить на сервер, но при запуске screen на сервере получается как раз два слоя. Заманаешься соображать, сколько раз надо нажать a после Ctrl-a, чтобы получить нужный эффект. А главное, чтобы не получить ненужного.

Date: 2020-02-16 09:39 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
При использовании стека из двух и более мультиплексоров терминала нужно им выставлять разные префикс-клавиши. Например, у tmux’а дефолтный префикс Ctrl+b.

Date: 2020-02-16 10:12 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan

Необходимость на каждом хопе добавлять в стек ещё один мультиплексор мне представляется сомнительной. Один мультиплексор на локальной стороне, 0..1 на удалённой (в случае, если ожидается длительная работа с удалённой стороной), а на станциях пересадок достаточно голого шелла.

Разве что мы, сидя локально на A, работали на удалённой машине B, и тут внезапно обнаружилось, что надо сходить ещё на C и по странному совпадению связь до C есть только через B?

Date: 2020-02-16 10:44 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Непредсказуемо с позиции пользователя, который всё это делает, или с позиции .profile на машине, потенциально используемой в качестве перевалочной? А то же есть ещё опции ProxyJump и ProxyCommand, с которыми я б, наверно, поразбирался, будь у меня сколько-нибудь частым сценарий хождения по связной, но не полносвязной топологии.

Date: 2020-02-16 10:06 am (UTC)
filin: (Default)
From: [personal profile] filin
Спасибо, Кэп. А рефлексам своим как префикс-клавиши назначать?

Date: 2020-02-16 10:13 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Ну вот Ctrl+F4 и Alt+F4 в графических средах, например, на уровне рефлексов не путаются.

Date: 2020-02-16 03:55 pm (UTC)
filin: (Default)
From: [personal profile] filin
А у меня, разумеется, путаются виндовый Alt-Shift и мои Caps/Shift-Caps. Ну, с Alt-F4 проще — у меня в линуксе из каждой программы штатный выход по-своему, рефлекс не встаёт. В смысле, на винде я всё время норовлю применить привычный жест.

Date: 2020-02-16 04:30 pm (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
Аналогия была в том, что в парах (Alt|Ctrl)+F4, (Alt|Ctrl)+[Shift+]Tab — и то и другое управляет окнами, но на разном уровне иерархии. Пока уровней не больше двух, модификаторов хватает, а также и визуал помогает эти уровни осознавать.

Date: 2020-02-16 07:28 pm (UTC)
filin: (Default)
From: [personal profile] filin
А, в этом смысле... Да, мысль не лишена интересности. У меня-то, в отличие от Витуса, ситуации «интерактивно зашел с одного сервера на другой» практикуются редко.

Я даже ее думал (поменять escape char на планшете, той системе, с которой могло регулярно требоваться ssh screen из-под screen), но отказался, потому что в VX Connectbot удобно было переключать окна нажатием на громкость, прямо-таки на порядок удобнее, чем с клавиатуры, если мы про экранную. Его можно настроить, чтобы он при этом выдавал C-a SPACE. Но, заразу, нельзя настроить, чтобы он выдавал там не C-a, а что-то иное. А переключаться надо часто.

Date: 2020-02-16 12:08 pm (UTC)
beldmit: (Default)
From: [personal profile] beldmit
См. описанную ниже проблему.

Я её обошёл, добавив PID в имя создаваемого файла, но я не уверен, что из этого не следует никаких security implications.

find ~/.ssh/ -xtype l|xargs rm -rf
if [ -S "$SSH_AUTH_SOCK" ] && [ ! -h "$SSH_AUTH_SOCK" ]; then
    ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock.$$
fi
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock.$$

Date: 2020-02-16 04:21 pm (UTC)
filin: (Default)
From: [personal profile] filin
Что-то я подозреваю, что лечение получается хуже болезни.

В начале ты убиваешь все симлинки других процессов. Не глядя, завершились они или нет, и им эти симлинки еще нужны. В частности, ты можешь убить и ту симлинку, которая у тебя самого в SSH_AUTH_SOCK, если это не .profile, а .bashrc.

А оригинальная идея хороша, ее надо повнимательнее подумать.

Date: 2020-02-16 04:41 pm (UTC)
beldmit: (Default)
From: [personal profile] beldmit
На практике не убиваю. Когда у нас .bashrc выполняется в графических оболочках?

Date: 2020-02-16 07:43 pm (UTC)
filin: (Default)
From: [personal profile] filin
При любом запуске интерактивного шелла.

А, присмотрелся. Ты убиваешь (кстати, зря у тебя там -r у rm) только висячие симлинки. Те, которые указывали на уже сдохший сокет.

Тогда да, жизнеспособно.

Date: 2020-02-16 07:47 pm (UTC)
beldmit: (Программизм)
From: [personal profile] beldmit
Да, насчёт -r ты прав, но директории я там не создаю. Забыл уже, что только висячие. Надо комментарий довесить.

Date: 2020-02-16 07:56 pm (UTC)
filin: (Default)
From: [personal profile] filin
Нет, вру.

Ты, похоже, потерял оригинальное решение.

Тестовый пример.

Заходим по ssh с ForwardAgent на хост A. Там это выполняем, запускаем screen. Детачимся, выходим. Сокет сдох.

Заходим туда снова по ssh. В свежезапущенном шелле всё хорошо, но мы... аттачимся к скрину. И попадаем в первый шелл. Чей симлинк давно указывал в никуда, а при запуске второго шелла был удален. Пытаемся из него зайти по ssh на хост B с помощью агента. Упс...

В оригинальном решении, когда у всех таких шеллов текст SSH_AUTH_SOCK один, симлинк будет просто указывать на новый сокет, и старый шелл сможет воспользоваться новым агентом. Ради чего и делалось. А то, что делаешь ты, вообще не видно, чтобы имело какое-то преимущество перед штатной работой ssh.
Edited Date: 2020-02-16 07:57 pm (UTC)

Date: 2020-02-16 08:00 pm (UTC)
beldmit: (Программизм)
From: [personal profile] beldmit
Оригинальное решение у меня не работало в Криптокоме без screen. Ну ладно, вернусь на активное использование screen - посмотрю ещё раз.

Date: 2020-02-17 01:15 pm (UTC)
filin: (Default)
From: [personal profile] filin
Что-то я пытаюсь понять и не могу: чем твое решение отличается от его отсутствия? Какое действие с ним работает, а без него (только с ssh-agent, без костылей) — нет?

Date: 2020-02-17 04:49 pm (UTC)
beldmit: (Default)
From: [personal profile] beldmit
Не, я мог сам себя перехитрить. В Криптокоме домашняя директория с одной машины монтируется на все тестовые виртуалки, и там у меня были какие-то артефакты, для обхода чего я это и допиливал.

Date: 2020-02-20 01:08 pm (UTC)
filin: (Default)
From: [personal profile] filin
Присоединяюсь ко мнению Витуса. И добавляю, что чистить то, что кажется сдохшими симлинками, в этом раскладе не стоит. Потому что то, что с этого хоста кажется симлинком в никуда, может оказаться вполне живым симлинком, просто другого хоста.

Артефакт, собственно, и был в том, что симлинк переписывают с другого хоста.

Ты вот хорошо умеешь искать по всяким stackexchange etc, но зачем-то забываешь, что найденное там стоит либо поднапрячься и понять, либо не использовать. Даже если кажется, что оно работает :-)

Date: 2020-02-20 02:09 pm (UTC)
beldmit: (Default)
From: [personal profile] beldmit
Да, на монтируемом повсюду /home у меня они не сносятся.

Date: 2020-02-16 08:02 pm (UTC)
beldmit: (Программизм)
From: [personal profile] beldmit
Да, там, где screen, у меня оригинальное решение оставлено.

Date: 2020-02-16 09:31 pm (UTC)
dmarck: (Default)
From: [personal profile] dmarck
find -delete же!

Date: 2020-02-14 06:16 pm (UTC)
burbilog: (Default)
From: [personal profile] burbilog
С середины 90х годов пользую screen, но не так чтобы отдельной командой процессы запускать, а управляя экранами. Тогда это было единственным способом не потерять запущенную программу, когда отвалился модем. Перезвонил, законнектился, screen -d -r
и вперед.

Соответственно для запуска чего-то отдельного (чтобы потом посмотреть) ^a^c, ну а когда надо на нужный экран переключился и вперед.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1 23 4 567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 5th, 2025 10:28 pm
Powered by Dreamwidth Studios
OSZAR »