โซลูชันของฉันแข็งแกร่งขึ้นอีกเล็กน้อย วางสิ่งนี้ลงใน. bash_profile ของคุณบนด้านรีโมต
if [ -z "${STY}" -a -t 0 ]; then
reattach () {
if [ -n "${SSH_AUTH_SOCK}" ]; then
ln -snf "${SSH_AUTH_SOCK}" "${HOME}/.ssh/agent-screen"
SSH_AUTH_SOCK="${HOME}/.ssh/agent-screen" export SSH_AUTH_SOCK
fi
exec screen -A -D -RR ${1:+"$@"}
}
fi
จากนั้นฉันก็ใช้ reattach
แทน screen
. สิ่งนี้สามารถทำได้โดยใช้ command screen -A ${1:+"$@"}
และ 'screen' แทน 'reattach'
ปัญหาเกี่ยวกับการใช้โซลูชัน 'alias' ในคำตอบโดย @David Mackintosh ก็คือกระบวนการที่ทำงานในหน้าจอตอนนี้มีค่า SSH_AUTH_SOCK เดียวกันบนฝั่งระยะไกล คิดว่าฉากต่อไปนี้
- ท้องถิ่น: เริ่มรับตัวแทน SSH
SSH_AUTH_SOCK
ราคา
- ท้องถิ่น: SSH เพื่อระยะไกลการตั้งค่าใหม่
SSH_AUTH_SOCK
ค่าในระยะไกล
- ระยะไกล: เริ่มต้น
screen
หรือ tmux
ใช้ SSH_AUTH_SOCK
- รีโมต: สร้างเชลล์ซึ่งสืบทอด SSH_AUTH_SOCK จาก
screen
- ระยะไกล: แยกออกจากหน้าจอและออกจากระบบ
- ท้องถิ่น: SSH เพื่อระยะไกลการตั้งค่า ใหม่
SSH_AUTH_SOCK
ค่าในระยะไกล
- ระยะไกล: แนบเซสชันหน้าจออีกครั้งซึ่งยังมี เก่า
SSH_AUTH_SOCK
ราคา
เคล็ดลับคือการทำให้กระบวนการทำงานภายในหน้าจอเพื่อใช้ค่าใหม่ คุณสามารถทำได้โดยการเรียก symlink ใหม่ให้เป็นปัจจุบัน SSH_AUTH_SOCK
ทุกครั้งที่คุณโทร screen
(สำหรับเซสชันใหม่หรือเซสชันที่ถูกเชื่อมต่อใหม่)