phd

Хорошо зафиксированный сокет в мягких линках не нуждается

May 14, 2020 01:15

Я дозрел, наконец, начать запускать screen автоматом на удалённых серверах (пока сам, без сына). Начал отсюда, благо там эта проблема уже разжёвана. И быстро наткнулся, что тамошнее решение мне надо допиливать в самую неожиданную сторону.

Тут же выяснилось, что fix_ssh_auth_sock мне не нужен совсем, у меня этот сокет и так зафиксирован, благо я пользуюсь не ssh-agent, а gpg-agent, и сокет у меня ~/.gnupg/S.gpg-agent.ssh.

Далее, if [ -n "$SSH_CONNECTION" ]; then exec screen -xRR; fi. Проблема оказалась в том, что bash выполняет .profile и в интерактивном, и в неинтерактивном шеллах, а в неинтерактивном screen совсем не нужен. Например, в ssh -t host command, или когда ssh используется как транспорт для git или rsync. Пришлось добавить в .profile проверки на интерактивность. В результате хвост моего .profile стал выглядеть так:

# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return ;;
esac

# Stop if non-interactive shell
[ -z "$PS1" ] && return

if [ -n "$SSH_CONNECTION" -a -z "$STY" -a -t 0 ] &&
which screen >/dev/null 2>&1
then
exec screen -xRR -S default
fi
Полностью можно посмотреть в https://phdru.name/Software/dotfiles/ и https://git.phdru.name/dotfiles.git/

Upd. Я вернул прежний .profile, т.е. удалил запуск screen. Вместо этого я делаю запуск screen вместе с терминалом и ssh:

rxvt-unicode -e ssh -t remote_host exec screen -xRR -S default
Репост из DW не работает, так что копирую.

ssh, лытдыбр, bash, linux, unix

Previous post Next post
Up