1) In Ihrem SSH rc-Skript (~ / .ssh / rc) richten Sie eine symbolische Verbindung von einem kanonischen Speicherort zum "aktuellen" SSH_AUTH_SOCK ein. So mache ich es in Bash (Inhalt von ~ / .ssh / rc):
#!/bin/bash
if test "$SSH_AUTH_SOCK" ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
(und stellen Sie sicher, 755 ~ / .ssh / rc zu chmod). Der "Test" soll nur verhindern, dass ein Fehler angezeigt wird, wenn Sie nicht ssh-agent ausführen (dh Sie ssh ohne -A). Die zweite Hälfte dieses Befehls richtet einen Symlink an einem kanonischen Speicherort ein, der sich beim Anmelden auf den "echten" SSH_AUTH_SOCK aktualisiert. Dies ist unabhängig von der Verwendung einer Shell in ssh oder dem direkten Aufruf eines Befehls und funktioniert auch mit "ssh -t screen -RRD".
Hinweis: Die Existenz von ~ / .ssh / rc ändert das Verhalten von sshd. Insbesondere wird xauth nicht aufgerufen. Weitere Informationen finden Sie unter man sshd.
Außerdem sollten Sie "-v" nicht mit ln verwenden, sobald es rsync-over-ssh mit folgender Diagnose unterbricht:
$ 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) In Ihrem .screenrc müssen Sie nur SSH_AUTH_SOCK an der kanonischen Position überschreiben:
setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Beachten Sie, dass Sie setenv unabhängig von der verwendeten Shell verwenden. Ich denke, dass setenv Bildschirmsyntax ist, nicht die Shell.
Lösung ursprünglich aus diesem Beitrag angepasst , die nicht funktioniert, aber die richtige Idee hat.