จะใช้การส่งต่อตัวแทน ssh กับ“ vagrant ssh” ได้อย่างไร?


107

แทนที่จะสร้างคู่คีย์ SSH ใหม่ในกล่องจรจัด, ผมอยากจะกลับมาใช้คู่คีย์ฉันมีในเครื่องโฮสต์ของฉันโดยใช้การส่งต่อตัวแทน ฉันได้ลองตั้งค่าconfig.ssh.forward_agentเป็น TRUE ใน Vagrantfile จากนั้นรีบูต VM และลองใช้:

vagrant ssh -- -A

... แต่ฉันยังคงได้รับแจ้งให้ใส่รหัสผ่านเมื่อฉันพยายามชำระเงินด้วยคอมไพล์ มีความคิดอะไรที่ฉันขาดหายไป?


หากคุณไม่มีคีย์ ssh อย่างถูกต้อง git ไม่ควรถามรหัสผ่าน แต่บอกคุณว่าคุณได้ปฏิเสธสิทธิ์ ฉันเดาว่าคุณถูกขอรหัสผ่านเนื่องจากคุณกำลังโคลนจาก https แทนที่จะเป็น git@github.com (ssh) 2 เซ็นต์ของฉัน
alexserver

คำตอบ:


89

ฉันใช้ vagrant 2 บน OS X Mountain Lion

Vagrant.configure("2") do |config|
  config.ssh.private_key_path = "~/.ssh/id_rsa"
  config.ssh.forward_agent = true
end
  1. config.ssh.private_key_path คือคีย์ส่วนตัวในเครื่องของคุณ
  2. คีย์ส่วนตัวของคุณต้องพร้อมใช้งานสำหรับ ssh-agent ในพื้นที่ คุณสามารถตรวจสอบได้ssh-add -Lหากไม่มีอยู่ในรายการให้เพิ่มด้วยssh-add ~/.ssh/id_rsa
  3. อย่าลืมเพิ่มคีย์สาธารณะของคุณ~/.ssh/authorized_keysใน Vagrant VM คุณสามารถทำได้โดยคัดลอกและวางหรือใช้เครื่องมือเช่นssh-copy-id

8
ฉันสังเกตว่าหลังจากที่ตั้งค่าข้างต้นฉันสามารถใช้ผู้ใช้ "คนจรจัด" เพื่อ "git clone" ได้ แต่ฉันไม่สามารถใช้ผู้ใช้ "root" เพื่อ "git clone" ได้ คุณรู้หรือไม่ว่าสิ่งที่ดูเหมือนจะเป็นปัญหา? ขอบคุณ
Nam Nguyen

7
config.ssh.private_key_path = "~/.ssh/id_rsa"Waiting for VM to bootทำให้คนจรจัดแขวนบน
apennebaker

14
คุณต้องเก็บกุญแจประกันคนเร่ร่อนไว้ด้วยconfig.ssh.private_key_path = [ '~/.vagrant.d/insecure_private_key', '~/.ssh/id_rsa' ]
Calin

3
ใน OS X ฉันพบว่ามีการเพิ่มคีย์ส่วนตัวลงในพวงกุญแจ OS X ด้วยการssh-add -Kทำงาน (เช่นเดียวกับconfig.ssh.forward_agent = true) ดูคำตอบนี้
Flimm

2
ฉันได้รับข้อผิดพลาดเดียวกันกับ @apennebaker และการทำตามขั้นตอนที่ Calin แนะนำก็ไม่ช่วยอะไร ... สิ่งที่ได้ผลสำหรับฉันคือการเพิ่มคีย์ไปยังพวงกุญแจจากระบบปฏิบัติการโฮสต์ของฉันและปิดใช้งานการกำหนด config.ssh.private_key_path
alexserver

80

เพิ่มลงใน Vagrantfile

Vagrant::Config.run do |config|
   # stuff
   config.ssh.forward_agent = true
end

ดูเอกสาร


11
ตรวจสอบให้แน่ใจว่าคุณเพิ่ม ssh บนโฮสต์ที่อยู่เบื้องหลังและคีย์ถูกถอดรหัสแล้ว
EnabrenTane

1
โปรดทราบว่า Windows ไม่ได้เริ่มต้น ssh-agent โดยอัตโนมัติซึ่งคุณต้องใช้เพื่อส่งต่อคีย์ ssh ของคุณ ทำตามคำแนะนำนี้เพื่อตั้งค่า ssh-agent autostarting บน Windows
nebffa

62
คำตอบนี้อาจไม่สมควรได้รับการโหวตมากนัก OP ระบุอย่างชัดเจนว่าพวกเขาเพิ่มลงconfig.ssh.forward_agentในไฟล์ config ดังนั้นคำตอบนี้จะให้ข้อมูลใหม่อะไร แม้แต่ลิงค์ก็อยู่ในคำถามแล้ว
Trindaz

7
@Trindaz คุณสมบูรณ์ถูกต้อง ฉันไม่สามารถอธิบายได้ว่าทำไมนี่จึงเป็นหนึ่งในคำตอบยอดนิยมของฉัน แต่ดูเหมือนว่าสิ่งนี้ช่วยคนได้อย่างน้อย 52 คนดังนั้นฉันต้องเรียกสิ่งนั้นว่าชนะ
EnabrenTane

1
คำตอบนี้ไม่ได้นำมาซึ่งข้อมูลใหม่ ๆ แต่ในทางกลับกันมันคือทุกสิ่งที่ต้องกำหนดค่าสำหรับเครื่องที่จัดเตรียมของ Vagrant อย่างน้อยก็ให้คุณมีการตั้งค่าการส่งต่อตัวแทนอย่างถูกต้องบนเครื่องเชื่อมต่อ (เช่นการส่งต่อใช้ได้กับเครื่องอื่นที่ไม่ใช่คนเร่ร่อน)
techraf

20

นอกเหนือจากการเพิ่ม "config.ssh.forward_agent = true" ลงในไฟล์ vagrant แล้วโปรดตรวจสอบว่าคอมพิวเตอร์โฮสต์ได้รับการตั้งค่าสำหรับการส่งต่อตัวแทน Github ให้คำแนะนำที่ดีสำหรับสิ่งนี้ (ดูหัวข้อการแก้ไขปัญหา)


7

ฉันใช้งานได้กับคำตอบข้างต้นใน 1.4.3 แต่หยุดทำงานบน 1.5 ตอนนี้ฉันต้องวิ่งssh-addไปทำงานอย่างเต็มที่ด้วย 1.5

ตอนนี้ฉันเพิ่มบรรทัดต่อไปนี้ในสคริปต์การจัดเตรียมที่ตอบได้ของฉัน - name: Make sure ssk keys are passed to guest. local_action: command ssh-add

ฉันได้สร้างส่วนสำคัญของการตั้งค่าของฉันด้วย: https://gist.github.com/KyleJamesWalker/9538912


ฉันต้องใช้ ssh-add กับ 1.4 และ 1.5 เสมอมิฉะนั้นจะไม่มีตัวแทนที่ทำงานเพื่อส่งต่อ
iheggie

5

หากคุณใช้ Windows SSH Forwarding ใน Vagrant จะทำงานไม่ถูกต้องตามค่าเริ่มต้น (เนื่องจากข้อบกพร่องใน net-ssh) ดูรายงานข้อผิดพลาดของ Vagrant โดยเฉพาะ: https://github.com/mitchellh/vagrant/issues/1735

อย่างไรก็ตามมีวิธีแก้ปัญหา! เพียงแค่คัดลอกคีย์ SSH ในเครื่องของคุณไปยัง Vagrant VM โดยอัตโนมัติผ่านสคริปต์การจัดเตรียมที่เรียบง่ายใน VagrantFile ของคุณ นี่คือตัวอย่าง: https://github.com/mitchellh/vagrant/issues/1735#issuecomment-25640783


2

เมื่อเร็ว ๆ นี้เราได้ลองใช้vagrant-awsปลั๊กอินกับ Vagrant 1.1.5 เราพบปัญหาเกี่ยวกับการส่งต่อตัวแทน SSH มันกลับกลายเป็นว่าคนจรจัดถูกบังคับให้ไม่มีตัวเลือกที่จะเปลี่ยนไปยังIdentitiesOnly=yes noสิ่งนี้บังคับให้ Vagrant ดูเฉพาะคีย์ส่วนตัวที่เราระบุไว้ในไฟล์Vagrantfileผู้ให้บริการ AWS

ผมเขียนถึงประสบการณ์ของเราในบล็อกโพสต์ อาจกลายเป็นคำขอดึงในบางจุด


2
มีวิธีอัตโนมัติในการคัดลอกคีย์สาธารณะที่อยู่ด้านล่างบนเครื่องโฮสต์ไปยัง Vagrant VM ในการสร้างด้วยVagrant upหรือไม่? ตอนนี้ฉันต้องสร้างเครื่องล็อกอินด้วยตนเองจากนั้นเพิ่มคีย์สาธารณะของฉันไปที่ /home/vagrant/.ssh/authorized_keys
โนอาห์

1

ตรวจสอบให้แน่ใจว่า VM ไม่ได้เปิดเอเจนต์ SSH ของตัวเอง ฉันมีบรรทัดนี้ในไฟล์~/.profile

eval `ssh-agent`

หลังจากลบออกแล้วการส่งต่อเอเจนต์ SSH จะทำงาน


0

ปัญหาที่แท้จริงคือ Vagrant ใช้ 127.0.0.1:2222 เป็นค่าเริ่มต้น port-forward คุณสามารถเพิ่มได้ (ไม่ใช่ 2222, 2222 ถูกครอบครองโดยค่าเริ่มต้นแล้ว)

config.vm.network "forwarded_port", แขก: 22, โฮสต์: 2333, host_ip: "0.0.0.0"

"0.0.0.0" เป็นวิธีรับคำขอจากการเชื่อมต่อภายนอก จากนั้น ssh -p 2333 vagrant@192.168.2.101 (เปลี่ยนเป็นที่อยู่ IP ของโฮสต์ของคุณเอง dud) จะทำงานได้ดี ขอบคุณฉันโทรหาฉัน Leifeng!


0

ใน Windows ปัญหาคือ Vagrant ไม่รู้วิธีสื่อสารกับ ssh-agent ของ git-bash อย่างไรก็ตามรู้วิธีใช้ Pageant ของ PuTTY ดังนั้นตราบใดที่ Pageant ทำงานอยู่และโหลดคีย์ SSH ของคุณและตราบใดที่คุณตั้งค่า config.ssh.forward_agent สิ่งนี้ก็น่าจะใช้ได้

ดูความคิดเห็นนี้สำหรับรายละเอียด

หากคุณใช้ Pageant วิธีแก้ปัญหาในการอัปเดต Vagrantfile เพื่อคัดลอกคีย์ SSH บน Windowsก็ไม่จำเป็นอีกต่อไป

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