1) У вашому SSH скрипті rc (~ / .ssh / rc) ви встановите символічне посилання з канонічного місця на "поточний" SSH_AUTH_SOCK. Ось як я це роблю в bash (вміст ~ / .ssh / rc):
#!/bin/bash
if test "$SSH_AUTH_SOCK" ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
(і переконайтеся, що chmod 755 ~ / .ssh / rc). "Тест" призначений лише для того, щоб помилка не відображалася, якщо ви не працюєте з ssh-агентом (тобто ви не маєте ssh без -A). Друга половина цієї команди встановлює символьне посилання в канонічному місці, яке оновлює себе до "справжнього" SSH_AUTH_SOCK під час входу. Це не залежить від використання оболонки в ssh або виклику команди безпосередньо, працює також з "ssh -t screen -RRD".
Примітка: існування ~ / .ssh / rc змінює поведінку sshd. Примітно, це не назве xauth. Дивіться man sshd для отримання додаткової інформації та як це виправити.
Крім того, не слід використовувати "-v" з ln, як тільки він порушить rsync-over-ssh з наступною діагностикою:
$ rsync -n addr.maps.dev.yandex.net: .
protocol version mismatch -- is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(173) [Receiver=3.0.7]
2) У вашому .screenrc вам просто потрібно перекрити SSH_AUTH_SOCK на канонічне місце:
setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Зауважте, що ви використовуєте setenv незалежно від того, яку оболонку ви використовуєте; Я думаю, що setenv - це синтаксис екрану, а не оболонка.
Спочатку рішення, адаптоване з цієї публікації , не працює, але має правильну ідею.