1) Nel tuo script SSH rc (~ / .ssh / rc) imposterai un collegamento simbolico da una posizione canonica al "corrente" SSH_AUTH_SOCK. Ecco come lo faccio in bash (contenuto di ~ / .ssh / rc):
#!/bin/bash
if test "$SSH_AUTH_SOCK" ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
(e assicurati di modificare 755 ~ / .ssh / rc). Il "test" serve solo a impedire la visualizzazione di un errore se non si esegue ssh-agent (ovvero se si è ssh senza -A). La seconda metà di quel comando imposta un collegamento simbolico in una posizione canonica che si aggiorna al "vero" SSH_AUTH_SOCK al momento dell'accesso. Questo è indipendente dall'uso di una shell in ssh o dalla chiamata diretta di un comando, funziona anche con "ssh -t screen -RRD".
Nota: l'esistenza di ~ / .ssh / rc modifica il comportamento di sshd. In particolare, non chiamerà xauth. Vedi man sshd per maggiori informazioni e come risolverlo.
Inoltre, non dovresti usare "-v" con ln non appena interromperà rsync-over-ssh con la seguente diagnostica:
$ 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) Nel tuo .screenrc, devi solo sovrascrivere SSH_AUTH_SOCK nella posizione canonica:
setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Nota che usi setenv, indipendentemente dalla shell che usi; Penso che setenv sia la sintassi dello schermo, non la shell.
Soluzione originariamente adattata da questo post , che non funziona, ma ha l'idea giusta.