[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: