Re: tmux на локальной машине (was Xfce Terminal Emulator)
Victor Wagner -> debian-russian@lists.debian.org @ Thu, 13 Jul 2017 22:34:51 +0300:
> А вот, кстати, не поделится ли кто опытом - как screen или tmux
> правильно сочетать с ssh-агентом. А то большвя часть процессов, которые
> хочется запустить в screen и уйти то ли от дисплея локальной машины,
> разлогинившись, то ли с удаленного сервера, норовят на какой-нибудь
> github по ssh ломиться.
> Сейчас у меня агент запускается через pam-ssh, а потом форвародится
> через все ssh-сессии. Естественно при завершении логинной сессии агент
> исчезает и переменные SSH_AUTH_SOCK и SSH_AGENT_PID во всех сессиях
> screen начинают показывать никуда.
> (вообще у меня еще есть желание докрутить это дело до того, чтобы при
> блокировке экрана light-locker-ом ключи бы из агента вычищались, а при
> вводе пароля опять pam-ssh их бы туда клал.
> Соответствено есть две разные проблемы:
> 1. Придумать удобный, желательно zero-key solution, чтобы при запуске
> screen там образовывался свой агент со своими ключами, по которым
> пускают только на гитхаб или тому подобные сайты, куда может
> понадобится скрипту без человеческого надзора ходить.
> 2. Придумать способ как сделать, чтобы при реконнекте к screen-у у
> выполняющихся внутри его сессий процессов появлялся доступ к ssh-ключам
> той сессии, откуда выполнен реконнект.
> (похоже тут ничего не придумаешь кроме встраивания в мультиплексор
> терминалов своего agent-forwarder-а).
Ко второму у меня есть. Правда, довольно навороченное.
zsh% cat ~/etc/bin/git
#!/bin/sh
export GIT_SSH="$HOME/etc/bin/ssh"
exec /usr/bin/git "$@"
zsh% cat ~/etc/bin/ssh
#!/bin/sh
[ -n "$STY" ] && [ -f "$HOME/bin/fixssh" ] && . "$HOME/bin/fixssh"
exec /usr/bin/$(basename $0) "$@"
zsh% cat ~/etc/bin/grabssh
#!/bin/sh
[ -z "$STY" ] || exit 1
[ -d $HOME/bin ] || mkdir $HOME/bin
SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
for x in ${SSHVARS} ; do
(eval echo $x=\$$x) | sed 's/=/="/
s/$/"/
s/^/export /'
done 1>$HOME/bin/fixssh
zsh% cat ~/etc/bin/screen
#!/bin/sh
grabssh
exec /usr/bin/screen "$@"
Собственно, в ~/bin/fixssh получается
export SSH_CLIENT="127.0.0.1 43717 22"
export SSH_TTY="/dev/pts/1"
export SSH_AUTH_SOCK="/tmp/ssh-7olChLovwG/agent.6998"
export SSH_CONNECTION="127.0.0.1 43717 127.0.0.1 22"
export DISPLAY=""
Подозреваю, что в комплекте с keychain получится и решение первой
задачи. Мне просто unattended не надо, я и не проверял.
Reply to: