1) W skrypcie rc SSH (~ / .ssh / rc) skonfigurujesz dowiązanie symboliczne z lokalizacji kanonicznej do „bieżącego” SSH_AUTH_SOCK. Oto jak to robię w bash (zawartość ~ / .ssh / rc):
#!/bin/bash
if test "$SSH_AUTH_SOCK" ; then
ln -sf $SSH_AUTH_SOCK ~/.ssh/ssh_auth_sock
fi
(i upewnij się, że chmod 755 ~ / .ssh / rc). „Test” ma jedynie na celu zapobieganie wyświetlaniu błędu, jeśli nie korzystasz z ssh-agent (tzn. Masz ssh bez -A). Druga połowa tego polecenia ustawia dowiązanie symboliczne w kanonicznej lokalizacji, która aktualizuje się do „prawdziwego” SSH_AUTH_SOCK podczas logowania. Jest to niezależne od używania powłoki w ssh lub bezpośredniego wywoływania polecenia, działa również z „ssh -t screen -RRD”.
Uwaga: istnienie ~ / .ssh / rc zmienia zachowanie sshd. W szczególności nie będzie wywoływać xauth. Zobacz man sshd, aby uzyskać więcej informacji i jak to naprawić.
Nie powinieneś także używać „-v” z ln, gdy tylko zepsuje rsync-over-ssh z następującą diagnostyką:
$ 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) W swoim .screenrc wystarczy zastąpić SSH_AUTH_SOCK do lokalizacji kanonicznej:
setenv SSH_AUTH_SOCK $HOME/.ssh/ssh_auth_sock
Zauważ, że używasz setenv bez względu na to, jakiej powłoki używasz; Myślę, że setenv to składnia ekranu, a nie powłoka.
Rozwiązanie pierwotnie zaadaptowane z tego postu , które nie działa, ale ma właściwy pomysł.