การใช้คำสั่ง IdentityFile ใน ssh_config เมื่อมีการใช้ AgentForwarding


15

เป็นไปได้หรือไม่ที่จะระบุคีย์ที่ส่งต่อโดยใช้ IdentityFile directive ใน. ssh / config

ฉันพบปัญหานี้เมื่อพยายามปรับใช้รหัสบางอย่างผ่าน Capistrano / GIT บนเซิร์ฟเวอร์ที่ใช้งานจริงของเรา ทั้งกุญแจส่วนตัวและกุญแจงาน GIT ของฉันจะถูกโหลดในตัวแทน SSH ของฉันเสมอและมันก็เกิดขึ้นจนกุญแจส่วนตัวของฉันถูกเพิ่มเข้าไปในตัวแทนก่อน ฉันใช้ตัวแทนการส่งต่อเมื่อปรับใช้กับ Capistrano ดังนั้นเมื่อโฮสต์พยายามรับรองความถูกต้องของการดำเนินการ 'git pull' มันล้มเหลวด้วยข้อผิดพลาดต่อไปนี้:

ข้อผิดพลาด: การอนุญาตให้ 'บางคนซื้อคืน' ปฏิเสธที่จะเป็น 'ผู้ใช้ของคุณ'

เพราะมันพยายามที่จะรับรองความถูกต้องโดยใช้คีย์ git ส่วนตัวของฉันก่อนที่จะลองใช้คีย์ที่เหมาะสม (ซึ่งมาในเอเจนต์ ssh) และสันนิษฐานว่าฉันกำลังเข้าถึง repo ต่างประเทศซึ่งฉันไม่ได้รับอนุญาตให้เข้าถึง ฉันสามารถให้สิทธิ์ผู้ใช้ส่วนตัวของฉันในการเข้าถึง repo งานทุกชิ้น แต่ในเครื่องของฉันฉันสามารถแก้ไขปัญหานี้ได้ด้วยการกำหนดโดเมนที่กำหนดเองใน. ssh / config ดังนี้:

โฮสต์ personal.github.com
ชื่อโฮสต์ github.com
ผู้ใช้ git
IdentityFile ~ / .ssh / some_key

โฮสต์ work.github.com
ชื่อโฮสต์ github.com
ผู้ใช้ git
IdentityFile ~ / .ssh / some_other_key

และวิธีนี้คอมไพล์ไม่เคยสับสน เป็นไปได้หรือไม่ที่จะสร้างกฎ. ssh / config สำหรับคีย์ที่ส่งต่อในกล่องการผลิตของฉันเพื่อให้พวกเขารู้เสมอว่าจะใช้คีย์ใดเมื่อดึงรหัสใหม่? โดยทั่วไปฉันต้องการจะทำ:

โฮสต์ work.github.com
ชื่อโฮสต์ github.com
ผู้ใช้ git
IdentityFile some_forwarded_key

ขอบคุณ!

คำตอบ:


22

คุณสามารถใช้ส่วนสาธารณะของคีย์เพื่อระบุคีย์ส่วนตัวที่คุณต้องการใช้จากตัวแทนที่ส่งต่อ สิ่งนี้ต้องการการสร้างไฟล์พิเศษ (ส่วนสาธารณะของกุญแจ) บนเครื่องใด ๆ "กลาง" (เครื่องที่คุณส่งต่อเอสเอสเอสในพื้นที่ของคุณ)

  1. จัดเตรียมเครื่องกลางให้มีการคัดลอกส่วนสาธารณะของคีย์ที่ต้องการในตำแหน่งที่สะดวก (เช่น~/.ssh/some_other_key.pub)

    จากเครื่องที่มีส่วนสาธารณะของกุญแจอยู่แล้ว:

    scp some_other_key.pub intermediate:.ssh/
    

    หรือบนเครื่องระดับกลาง:

    ssh-add -L | grep something_unique > ~/.ssh/some_other_key.pub
    

    คุณอาจต้องการแก้ไขส่วน "ความคิดเห็น" ต่อท้ายของกุญแจสาธารณะเพื่อระบุที่มา / เจ้าของ / วัตถุประสงค์ของคีย์ได้ดีขึ้น (หรือพยายามซ่อนเหมือนกัน)

  2. ใช้ชื่อพา ธ ไปยังแฟ้มปุ่มด้านบนกับประชาชนหรือ-iIdentityFile

  3. คุณอาจจำเป็นต้องใช้IdentitiesOnly yes(ใน.ssh/configหรือ-o) เพื่อป้องกันไม่ให้sshพยายามเสนอตัวตนเพิ่มเติมใด ๆ จากตัวแทนที่ส่งต่อของคุณ


นี่เป็นสิ่งเดียวที่ทำงานให้ฉันจากโซลูชันอื่น ๆ 10 ข้อ
Tracy Fu

1
เล่นกับสิ่งนี้ฉันรู้ว่าถ้าคุณใส่กุญแจสาธารณะที่เกี่ยวข้องกับกุญแจส่วนตัวที่คุณต้องการใช้ใน ~ / .ssh / id_rsa.pub บนเครื่องระดับกลางมันจะถูกใช้โดยปริยายโดยไม่จำเป็นต้องตั้งค่าใด ๆ ใน ~ / .ssh / config
bschlueter

ขอบคุณ Chris และ bschlueter! ตอนนี้ฉันเชื่อมต่อกับ: ssh someserver -t "ssh-add -L | grep something_unique> ~ / .ssh / id_rsa.pub; cd บาง / อื่น ๆ / โฟลเดอร์; bash --login"
blablabla

เมื่อฉันลองนี้กับssh -v -T ...เซิร์ฟเวอร์ยอมรับคีย์สาธารณะ แต่แล้ว ssh พูดNo such identity: /home/name/.ssh/id_rsa: No such file or directoryแล้วการตรวจสอบสิทธิ์ล้มเหลว ฉันเปิดใช้งาน ForwardAgent ในการกำหนดค่าทั้งหมดของฉัน มีปัญหาอะไร
Lars Nyström
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.