1) No seu script SSH rc (~ / .ssh / rc), você configurará um link simbólico de um local canônico para o SSH_AUTH_SOCK "atual". Aqui está como eu faço isso no bash (conteúdo de ~ / .ssh / rc):
#!/bin/bash
if test "$SSH_AUTH_SOCK" ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
(e certifique-se de chmod 755 ~ / .ssh / rc). O "teste" é apenas para impedir que um erro seja exibido se você não estiver executando o ssh-agent (ou seja, você ssh sem -A). A segunda metade desse comando configura um link simbólico em um local canônico que se atualiza para o SSH_AUTH_SOCK "real" no momento do login. Isso é independente do uso de um shell no ssh ou da chamada direta de um comando, também funciona com "ssh -t screen -RRD".
Nota: a existência de ~ / .ssh / rc altera o comportamento do sshd. Notavelmente, ele não chamará xauth. Veja man sshd para mais informações e como consertar isso.
Além disso, você não deve usar "-v" com o ln assim que ele interromper o rsync-over-ssh com os seguintes diagnósticos:
$ 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) No seu .screenrc, você só precisa substituir o SSH_AUTH_SOCK para o local canônico:
setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Observe que você usa setenv, não importa qual shell você usa; Eu acho que setenv é sintaxe da tela, não o shell.
Solução originalmente adaptada deste post , que não funciona, mas tem a ideia certa.