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
(และตรวจสอบให้แน่ใจว่าได้รับ chmod 755 ~ / .ssh / rc) "การทดสอบ" เพียงเพื่อป้องกันข้อผิดพลาดไม่ให้แสดงหากคุณไม่ได้ใช้งาน ssh-agent (เช่นคุณ ssh ไม่มี -) ช่วงครึ่งหลังของคำสั่งนั้นตั้งค่า symlink ในตำแหน่งที่ยอมรับซึ่งจะปรับปรุงตัวเองเป็น "จริง" SSH_AUTH_SOCK ในเวลาล็อกอิน นี่เป็นอิสระจากการใช้เชลล์ใน ssh หรือเรียกใช้คำสั่งโดยตรงทำงานได้กับ "ssh -t screen -RRD"
หมายเหตุ: การมีอยู่ของ ~ / .ssh / rc จะเปลี่ยนพฤติกรรมของ sshd โดยเฉพาะอย่างยิ่งมันจะไม่เรียก xauth ดู man 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
โปรดทราบว่าคุณใช้ setenv ไม่ว่าคุณจะใช้เชลล์อะไร ฉันคิดว่า setenv เป็นไวยากรณ์หน้าจอไม่ใช่เชลล์
โซลูชันดัดแปลงมาจากโพสต์นี้ซึ่งใช้งานไม่ได้ แต่มีแนวคิดที่ถูกต้อง