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


8

โดยปกติฉันมี ssh-agent กำลังทำงานอยู่ฉันจะไปที่ bastion host ของฉันจากนั้นเปิดเซสชั่น tmux และเชื่อมต่อกับกล่องอื่น ๆ ผ่านทางนั้น การส่งต่อคีย์ใช้ได้กับทุกเซสชันที่ฉันเปิดจากจุดนั้น

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

ฉันมีสิ่งเล็ก ๆ น้อย ๆ ใน bashrc ของฉันที่ทำให้การส่งต่อสำคัญทำงานเมื่อฉันกลับสู่ tmux แต่ฉันมีปัญหาในการหาวิธีที่จะทำให้มันทำงานต่อไปในเซสชั่นเปิดภายใน tmux

ตัวอย่างเช่นฉันมี bastion01, dbhost01, dbhost02, webhost01 และ webhost02

หากฉันเปิดการเชื่อมต่อกับ bastion01 ให้เริ่ม tmux ที่นั่นจากนั้นเชื่อมต่อกับ dbhost01 และการส่งต่อผ่าน webhost01 หากฉันปิดการเชื่อมต่อนั้นให้เชื่อมต่อและแนบเซสชัน tmux ที่มีอยู่ของฉันจากนั้นเพิ่มการเชื่อมต่อไปยัง dbhost02 และ webhost02 การส่งต่อคีย์ใช้งานได้ในกล่อง 02 แต่ไม่ได้อยู่บน 01

กรุณาช่วย!

คำตอบ:


11

ทุกครั้งที่คุณ ssh เข้าbastion01ซ็อกเก็ตที่แตกต่างกันจะเปิดขึ้นเพื่อจัดการกับการส่งต่อคีย์ SSH_AUTH_SOCKคุณสามารถดูชื่อไฟล์ในตัวแปรสภาพแวดล้อม เมื่อคุณเริ่มต้นtmuxค่าของตัวแปรสภาพแวดล้อมนั้นจะรวมอยู่ในtmuxสภาพแวดล้อมโกลบอลของซึ่งได้รับการสืบทอดโดยเชลล์ใด ๆ ที่เริ่มในเซสชั่นนั้น

ตอนนี้เมื่อคุณเชื่อมต่อใหม่ในbastion01ภายหลังซ็อกเก็ตที่แตกต่างกันจะถูกจัดสรรเพื่อจัดการกับการส่งต่อคีย์ของคุณ (เนื่องจากเป็นเซสชันใหม่ ssh) คุณสามารถดูสิ่งนี้ได้โดยการตรวจสอบค่าSSH_AUTH_SOCKก่อนที่จะแนบไปกับtmuxเซสชันของคุณอีกครั้งและหลังจากนั้น เพื่อให้การส่งต่อคีย์ทำงานภายในtmuxคุณต้องอัปเดตค่าของSSH_AUTH_SOCKInside tmuxเป็นชื่อของซ็อกเก็ตที่ใช้โดยเซสชันปัจจุบัน ssh

วิธีที่รวดเร็วและสกปรกในการทำเช่นนี้คือการเขียนสคริปต์สั้น ๆ ที่จะบันทึกค่าใหม่นี้ลงในไฟล์และดำเนินการนั้นภายในtmuxหน้าต่างใด ๆที่คุณจะsshออกจาก

#!/bin/bash

echo "export SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.auth_ssh

เรียกใช้งานสคริปต์นั้นทันทีที่คุณใส่เข้าไปbastion01แต่ก่อนที่คุณจะแนบไปกับเซสชัน tmux ของคุณอีกครั้ง จากนั้นก่อนที่คุณจะพยายาม ssh ที่ใดก็ได้จากภายในtmuxให้รันสิ่งต่อไปนี้:

source ~/.auth_ssh

แต่ละtmuxหน้าต่างมีสภาพแวดล้อมของตัวเองดังนั้นคุณจะต้องเรียกใช้ในแต่ละหน้าต่างที่คุณพยายามเรียกใช้ ssh เพื่อความง่ายคุณสามารถใช้ ssh แทนได้:

alias ssh="source ~/.auth_ssh; ssh"

หมายเหตุ: นี่เป็นบทสรุปเบื้องต้นของสคริปต์ที่เราใช้ในที่ทำงานเพื่ออัปเดตข้อมูลการอนุญาต SSH ถ้ามันไม่ถูกต้องฉันหวังว่าอย่างน้อยนี่จะให้ข้อมูลที่เพียงพอแก่คุณในการหาทางออกที่ดีกว่าให้กับ Google

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