ฉันจะส่งต่อคีย์ ssh ที่ส่งต่อไปยัง tmux แล้วได้อย่างไร?


15

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

$ ssh [server] -o ForwardAgent=yes
$ git pull       # Succeeds.
$ /bin/bash
$ git pull       # Still succeeds, despite new shell.
$ exit
$ tmux attach
$ git pull       # Permission denied (publickey)

ฉันยืนยันว่าคุณเปิดใช้งานเอเจนต์ที่แชร์ระหว่างเซสชันทั้งหมดของคุณหรือไม่ เอกสารที่bose.utmb.edu/Compu_Center/ssh/SSH_HOWTO.html > กำหนดค่ากระบวนการ ssh-agent อธิบายวิธีการเพื่อให้บรรลุผลนี้
Dereckson

มีความเกี่ยวข้องด้วย: unix.stackexchange.com/questions/75681/…
โจ

คำตอบ:


12

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

ลองแก้ไขนี้ :

  1. สร้างสคริปต์นี้และวางไว้ใน $ HOME / .ssh / saveagent

    #!/bin/sh
    SSHVARS="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY"
    
    for var in ${SSHVARS} ; do
      echo "export $var=\"$(eval echo '$'$var)\""
    done 1>$HOME/.ssh/latestagent
  2. เพิ่มลงในสคริปต์เริ่มต้นเชลล์ของคุณ เช่นถ้าคุณใช้ bash:

    echo '. ~/.ssh/saveagent' >> ~/.bash_login
  3. หลังจากติดตั้ง tmux แล้วให้รัน . $HOME/.ssh/latestagent

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


1
ส่งไปยัง. โปรไฟล์บางทีถ้าคุณพยายามที่จะเข้ากันได้กับเปลือกหอยอื่น ๆ
Dereckson

2
คำตอบที่ดี! ปัญหาน้อยฉันวิ่งเข้าไปที่: - บางส่วนของสภาพแวดล้อมตัวแปรที่มีช่องว่างเพื่อให้สายก่อนที่สุดท้ายในที่สคริปต์ควรจะ:saveagent echo "export $var=\"$(eval echo '$'$var)\""b - latestagentสคริปต์ควรถูกเรียกด้วยsourceแทนshดังนั้นการตั้งค่าตัวแปรจะส่งผลต่อการเรียกเชลล์ c - การเรียกใช้latestagentสคริปต์โดยอัตโนมัติเมื่อติดตั้ง tmux สามารถทำได้ผ่านวิธีการที่อธิบายไว้ที่นี่: unix.stackexchange.com/questions/86925/…
โจ

ขอบคุณ @Joe ฉันแก้ไขคำตอบของฉันเพื่อรวมการปรับปรุงของคุณ
GnP

0

หากคุณไม่ต้องการแหล่งสคริปต์ที่มีตัวแปรทั้งหมดที่คุณต้องการในทุกเชลล์ที่คุณวางไข่ในเชลล์ใหม่ใด ๆ ที่เกิดจากtmuxเซิร์ฟเวอร์เซสชันเดียวกันคุณอาจต้องการบอกtmuxให้ใส่ตัวแปรลงในเซสชันหรือสภาพแวดล้อมโกลบอลด้วยset-environmentคำสั่ง ตัวอย่างเช่นนี้ (สำหรับทุบตี):

for var in DISPLAY SSH_AUTH_SOCK ...; do
    tmux setenv "$var" "${!var}"
done

อย่าลืมที่จะเพิ่ม-gธงถ้าคุณต้องการในการประชุมอื่น ๆ เช่นกันและเพื่อการใช้งานถ้าคุณใช้มันจากด้านนอกของ-t <session>tmux


0

หลังจากอ่านคำตอบอื่น ๆ ที่นี่ฉันตัดสินใจที่จะคัดลอกคีย์สาธารณะ / ส่วนตัวของฉันไปยังเซิร์ฟเวอร์ระยะไกลเพื่อที่ฉันไม่ต้องกังวลเกี่ยวกับการส่งต่อตัวแทนอีกต่อไป

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