ฉันสามารถแนบการส่งต่อคีย์ SSH อีกครั้งผ่านเซสชันหน้าจอที่ไม่ได้เชื่อมต่อได้หรือไม่ [ซ้ำ]


6

ซ้ำกันได้:
การหมดเวลาคีย์ ssh-agent ด้วยหน้าจอหรือ tmux บนโฮสต์ป้อมปราการ

ฉันมีแล็ปท็อปที่ใช้การประกวด (ตัวแทนคีย์ PuTTy SSH) ถ้าฉัน ssh ไปยังระบบและหน้าจอเรียกใช้การส่งต่อคีย์ ssh ทำงานอย่างถูกต้อง

อย่างไรก็ตามหากฉันตัดการเชื่อมต่อจากเซสชันหน้าจอนั้นให้ออกจากระบบในภายหลังเชื่อมต่อใหม่ - การส่งต่อคีย์ไม่ทำงานอีกต่อไป ฉันคิดว่านี่เป็นเพราะเมื่อฉันเชื่อมต่อใหม่การส่งต่อคีย์ถูกตั้งค่าในพอร์ตที่แตกต่างกันสำหรับเซสชั่น ssh ใหม่กว่าเดิม

มีวิธีสอนหน้าต่างหน้าจอส่วนตัวให้เชื่อมต่อกับตัวแทนส่งต่ออีกครั้งเพื่อให้ฉันสามารถใช้รหัสของฉันเพื่อส่งต่ออีกครั้งได้หรือไม่

คำตอบ:


6

โซลูชันของฉันแข็งแกร่งขึ้นอีกเล็กน้อย วางสิ่งนี้ลงใน. 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 (สำหรับเซสชันใหม่หรือเซสชันที่ถูกเชื่อมต่อใหม่)


1

นี่เป็นสิ่งที่ซ้ำกัน: การหมดเวลาคีย์ ssh-agent ด้วยหน้าจอหรือ tmux บนโฮสต์ป้อมปราการ

การแก้ไขปัญหา:

  • เพิ่มใน. bash_profile ของคุณ:

    echo "export SSH_AUTH_SOCK = $ SSH_AUTH_SOCK" & gt; ~ / .ssh / auth_sock

  • เพิ่ม. bashrc ของคุณ:

    นามแฝง ssh = "source ~ / .ssh / auth_sock; ssh"

ดูเหมือนว่าจะทำงานให้ฉันได้


ฉันเขียนคำตอบสำหรับคำถามที่คุณเชื่อมโยง ดีใจที่ได้ยินว่าเหมาะกับคุณ ฉันไม่ได้ทดสอบและฉันก็ไม่แน่ใจว่ามันสมบูรณ์พอ! :)
chepner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.