ฉันใช้ Mac OS X Lion และล็อกอินโฮสต์ระยะไกลผ่าน SSH ทุกวัน แม้ว่าข้อเท็จจริงที่ว่าฉันใช้คู่คีย์ SSH สำหรับการรับรองความถูกต้องระยะไกลและฉันไม่จำเป็นต้องใช้วลีการเข้าสู่ระบบของโฮสต์ทุกเครื่อง แต่ก็ยังน่ารำคาญมากที่เทอร์มินัลขอรหัสผ่านสำหรับการเข้าถึงคีย์ส่วนตัว SSH ของฉัน
เพื่อเหตุผลด้านความปลอดภัยฉันคิดว่ารหัสผ่านสำหรับการเข้าถึงคีย์ส่วนตัว SSH นั้นเป็นสิ่งที่จำเป็นต้องมี มีวิธีที่ทำให้เครื่องขอวลีเพียงครั้งเดียวเมื่อเริ่มต้นแล้วจดจำได้และใช้กุญแจส่วนตัวของฉันโดยอัตโนมัติในรอบ SSH ภายหลัง?
มีสคริปต์ที่เรียกว่าkeychain
ทำงานได้ดีบน Gentoo Linux แต่ฉันไม่เคยคิดออกใน Mac OS X Lion ยิ่งไปกว่านั้นยังมีเงื่อนไขที่น่ากลัวมากมายเช่นssh-agent
, ssh-add
. หลังจากอ่านเนื้อหาต่าง ๆ เกี่ยวกับชุดเครื่องมือ SSH เหล่านั้นและทำการทดลองที่ทำให้ผิดหวังฉันก็สับสนมากขึ้น
ดังนั้นฉันมาที่ StackExchange ค้นหาคำแนะนำเกี่ยวกับคำถามต่อไปนี้
- อะไรคือ
ssh-agent
,ssh-add
และkeychain
,Keychain Access.app
พวกเขามีปฏิสัมพันธ์กันอย่างไร? - ฉันจะป้อนวลีรหัสผ่านสำหรับคีย์ส่วนตัว SSH ของฉันหนึ่งครั้งได้ที่ล็อกอินและใช้อย่างอิสระในการสร้างเซสชัน SSH ในภายหลัง
- เอ่อ ... เกิดอะไรขึ้นเนี่
Keychain Access.app
ย? ไม่เก็บวลี SSH เหมือนที่เคยทำมา
ฉันแสดงรายการสิ่งที่ฉันทำที่นี่ หวังว่าจะมีเบาะแสเกี่ยวกับขั้นตอนที่ฉันพลาดไป
ขั้นตอนที่ 1 สร้างคู่คีย์ SSH บน Mac ของฉัน
$ ssh-keygen -t rsa -C "me@email.com"
# Set a passphrase for accessing the private key.
ขั้นตอนที่ 2 คัดลอกกุญแจสาธารณะ SSH ของฉันไปยังโฮสต์ระยะไกล เพื่อยกตัวอย่างฉันคัดลอกกุญแจไปยัง localhost, Mac
$ ssh-copy-id USER@localhost
# Enter the login password for USER at localhost, not my SSH passphrase
ขั้นตอนที่ 3 จากนั้นลองเชื่อมต่อกับโฮสต์ระยะไกล (localhost ที่นี่) ผ่านการตรวจสอบความถูกต้องของคู่คีย์ SSH
$ ssh USER@locahost
Enter passphrase for key '/Users/YOUR_ACCOUNT/.ssh/id_rsa':
# Enter my SSH passphrase, not the login password.
ขั้นตอนที่ 4. ออกจากระบบจากโฮสต์ระยะไกลและลองเชื่อมต่ออีกครั้ง ประณามเทอร์มินัลถามหาวลี SSH อีกครั้ง
คำถามที่พบบ่อยคือ "เอสเอสเอสทำงานได้ดีบน Mac ของคุณหรือไม่" พูดตรงไปตรงมาฉันไม่รู้ว่าเกิดอะไรขึ้นกับสิ่งเหล่านี้ ที่นี่แสดงผลการทำงานบางอย่าง
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(EMPTY)
$ ssh-add -l
Could not open a connection to your authentication agent.
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-Z54zXukQiP/agent.26769; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26770; export SSH_AGENT_PID;
echo Agent pid 26770;
$ ssh-add -l
Could not open a connection to your authentication agent.
$ echo $SSH_AUTH_SOCK
/tmp/launch-M48niA/Listeners
$ echo $SSH_AUTH_PID
(STILL EMPTY)
$ ssh-agent # Oh no, anther ssh-agent with different PID
SSH_AUTH_SOCK=/tmp/ssh-cx0B4FUX8B/agent.26898; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26899; export SSH_AGENT_PID;
echo Agent pid 26899;
$ ps -e | grep -i ssh
26769 ?? 0:00.03 ssh-agent
26899 ?? 0:00.02 ssh-agent
ข้อเสนอแนะใด ๆ ยินดี ขอบคุณ!