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
(और 755 ~ / .shsh / आरसी chmod करने के लिए सुनिश्चित करें)। "परीक्षण" सिर्फ एक त्रुटि को प्रदर्शित करने से रोकने के लिए है यदि आप ssh- एजेंट नहीं चला रहे हैं (जैसे कि आप बिना ash)। उस आदेश का दूसरा भाग एक कैनोनिकल स्थान पर एक सिम्लिंक स्थापित करता है जो लॉगिन समय पर "वास्तविक" SSH_AUTH_SOCK को अपडेट करता है। यह ssh में एक शेल का उपयोग करने या सीधे एक कमांड को कॉल करने से स्वतंत्र है, "ssh -t स्क्रीन -RRD" के साथ भी काम करता है।
नोट: ~ / .ssh / rc का अस्तित्व sshd के व्यवहार को बदल देता है। विशेष रूप से, यह xauth नहीं कहेगा। अधिक जानकारी के लिए आदमी को 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
ध्यान दें कि आप सेटेनव का उपयोग करते हैं कोई फर्क नहीं पड़ता कि आप किस शेल का उपयोग करते हैं; मुझे लगता है कि सेटेनव स्क्रीन सिंटैक्स है, न कि शेल।
समाधान मूल रूप से इस पद से अनुकूलित है , जो काम नहीं करता है, लेकिन सही विचार है।