ทางตรงไปข้างหน้าเพื่อเรียกใช้ ssh-agent และ ssh-add ในการเข้าสู่ระบบผ่าน SSH?


37

ฉันพยายามที่จะให้คำสั่งต่อไปนี้ถูกดำเนินการอัตโนมัติเมื่อฉันลงชื่อเข้าใช้เซิร์ฟเวอร์ของฉันผ่าน ssh:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

คีย์ ssh ของฉันมีข้อความรหัสผ่านและฉันไม่ต้องใส่มันอีกครั้งต่อการเข้าสู่ระบบ

ฉันพยายามวางสิ่งนี้ลงในไฟล์. bashrc ของฉันอย่างไรก็ตามฉันเชื่อว่า ssh-agent เริ่มเซสชัน bash ใหม่ เมื่อฉันพยายามที่จะเข้าสู่ระบบหลังจากที่มีสิ่งนี้ใน. bashrc ของฉันมันจะติดและฉันต้องพิมพ์ 'ทางออก' เพื่อดูพรอมต์ 'ป้อนรหัสผ่านเพื่อปลดล็อคกุญแจ'

ข้อเสนอแนะอื่น ๆ ?

เซิร์ฟเวอร์กำลังใช้งาน Ubuntu LTS


ทำไมคีย์เอเจนต์บนเซิร์ฟเวอร์ มันควรจะอยู่ในลูกค้าท้องถิ่นของคุณที่คุณกำลังเชื่อมต่อจาก
Zoredache

@ Zoredache ฉันต้องการที่จะสามารถทำgit pullเช่นนั้นบนเซิร์ฟเวอร์ระยะไกล
คลิกโหวต

จากนั้นเรียกใช้ตัวแทน SSH บนเครื่องท้องถิ่นของคุณและส่งต่อตัวแทน
Zoredache

@Zoredache ขอบคุณไม่ทราบว่าเป็นไปได้ อย่างไรก็ตามฉันยังต้องการที่จะสามารถทำ ssh-add / ssh-agent จากภายในสคริปต์ทุบตีแม้จากเครื่องท้องถิ่นของฉัน ความเจ็บปวดที่ต้องเรียกใช้คำสั่งเหล่านั้นด้วยตนเอง
คลิกโหวต

คำตอบ:


51

คุณสามารถลองเพิ่มสิ่งนี้:

eval $(ssh-agent -s)
ssh-add ~/.ssh/id_rsa

วิธีนี้ssh-agentจะไม่เริ่มต้นเชลล์ใหม่มันเพิ่งเปิดตัวเองในพื้นหลังและคายคำสั่งเชลล์เพื่อตั้งค่าตัวแปรสภาพแวดล้อมที่เหมาะสม

ดังที่ได้กล่าวไว้ในความคิดเห็นบางทีคุณอาจไม่ต้องการเรียกใช้ตัวแทนเลยบนโฮสต์ระยะไกล แต่แทนที่จะทำในกล่องที่คุณใช้งานอยู่และใช้

ssh -A remote-host

เพื่อส่งต่อบริการของเอเจนต์ ssh ในพื้นที่ของคุณไปยังรีโมตโฮสต์

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


เมื่อฉันแทนที่ssh-agent /bin/bashด้วยssh-agent -sและจากนั้นฉันพยายามที่จะทำgit pullฉันยังคงถามรหัสผ่านของคีย์ส่วนตัวเพื่อปลดล็อค นั่นไม่ใช่สิ่งที่ฉันต้องการจริงๆฉันต้องการเพียงป้อนข้อความรหัสผ่านในการทำ ssh-add และไม่ต้องทำซ้ำทุกครั้งที่ฉันเรียกใช้คำสั่ง git ความคิดใด ๆ
คลิกโหวต

และเรียกใช้ตัวแทนในพื้นที่และการใช้ ssh -A ไม่ใช่ตัวเลือกสำหรับคุณ? ปัญหาคือคุณไม่สามารถ 'รีสตาร์ท' ssh-agent ในทุกการเชื่อมต่อ ทุกครั้งที่คุณเริ่มมันจะรู้ว่า 'ไม่มีอะไร' และเมื่อคุณเพิ่มคีย์คุณจะต้องถอดรหัสมัน ...
Tobi Oetiker

สำหรับไฟล์. ssh / config ของคุณ: โฮสต์รีโมท - โฮสต์อัตโนมัติ ControlMath อัตโนมัติ ControlPath ~/.ssh/master-%l-%r@%h:% p ControlPersist 2h
Tobi Oetiker

1
oops เพิ่งรู้ใน bash คุณต้องการ eval พิเศษต่อหน้า ssh-agent call .. อัปเดตคำตอบของฉันด้านบน
Tobi Oetiker

1
คุณสามารถสร้างนามแฝงได้
Tobi Oetiker

2

อีกทางเลือกหนึ่งคือการใช้ Funtoo ของพวงกุญแจ จากนั้นคุณสามารถติดหนึ่งซับในเปลือก bash ของคุณ:

eval $(keychain --eval id_rsa)

ซึ่งทำสิ่งเดียวกัน (เรียกใช้เอเจนต์ ssh ฯลฯ ) ในขณะที่ยังไม่ได้ใช้กระบวนการ ssh-agent สำหรับแต่ละ subshell แต่มันจะค้นหาอินสแตนซ์ "ที่กำลังทำงานอยู่" ที่คุณเป็นเจ้าของและแนบกับคุณ

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