นี่เป็นตัวอย่างทั่วไปของการแลกเปลี่ยนระหว่างความปลอดภัยและความสะดวกสบาย โชคดีที่มีตัวเลือกมากมาย โซลูชันที่เหมาะสมที่สุดขึ้นอยู่กับสถานการณ์การใช้งานและระดับความปลอดภัยที่ต้องการ
ssh-key พร้อมข้อความรหัสผ่านไม่ ssh-agent
ตอนนี้ต้องป้อนวลีรหัสผ่านทุกครั้งที่ใช้คีย์สำหรับการตรวจสอบสิทธิ์ ในขณะที่นี่เป็นตัวเลือกที่ดีที่สุดจากจุดยืนด้านความปลอดภัย สิ่งนี้อาจนำไปสู่วลีรหัสผ่านที่อ่อนแอซึ่งได้รับการคัดเลือกตามลำดับเพื่อลดภาระในการป้อนซ้ำ ๆ
ssh-key พร้อมข้อความรหัสผ่านด้วย ssh-agent
การเพิ่มรายการต่อไปนี้เพื่อ~/.bash_profile
จะเริ่มต้นโดยอัตโนมัติssh-agent
และโหลด ssh-key (s) เมื่อเข้าสู่ระบบ:
if [ -z "$SSH_AUTH_SOCK" ] ; then
eval `ssh-agent -s`
ssh-add
fi
ตอนนี้ต้องป้อนวลีรหัสผ่านทุกครั้งที่ลงชื่อเข้าใช้ ในขณะที่ดีขึ้นเล็กน้อยจากมุมมองการใช้งานนี้มีข้อเสียเปรียบที่ssh-agent
พร้อมท์สำหรับวลีรหัสผ่านโดยไม่คำนึงว่าจะใช้คีย์หรือไม่ในระหว่างเซสชันการเข้าสู่ระบบ การเข้าสู่ระบบใหม่แต่ละครั้งจะมีssh-agent
อินสแตนซ์ที่แตกต่างกันซึ่งยังคงทำงานอยู่โดยมีปุ่มเพิ่มในหน่วยความจำแม้ว่าจะออกจากระบบเว้นแต่ว่าจะถูกฆ่าอย่างชัดเจน
หากต้องการฆ่าssh_agent
เมื่อออกจากระบบให้เพิ่มรายการต่อไปนี้ใน~/.bash_logout
if [ -n "$SSH_AUTH_SOCK" ] ; then
eval `/usr/bin/ssh-agent -k`
fi
หรือต่อไปนี้เพื่อ ~/.bash_profile
trap 'test -n "$SSH_AUTH_SOCK" && eval `/usr/bin/ssh-agent -k`' 0
การสร้างหลายssh-agent
กรณีสามารถหลีกเลี่ยงได้โดยการสร้างซ็อกเก็ตการสื่อสารแบบถาวรไปยังตัวแทนในตำแหน่งที่คงที่ในระบบแฟ้มเช่นในคำตอบ Collin เดอร์สัน นี่คือการปรับปรุงการวางไข่เอเจนต์หลายอินสแตนซ์อย่างไรก็ตามยกเว้นการฆ่าคีย์ถอดรหัสที่ยังคงอยู่ในหน่วยความจำหลังจากออกจากระบบอย่างชัดเจน
บนเดสก์ท็อป ssh-agent ที่มาพร้อมกับสภาพแวดล้อมเดสก์ท็อปเช่นGnome Keyring SSH Agentอาจเป็นวิธีที่ดีกว่าเนื่องจากพวกเขาสามารถทำการขอให้ใส่ข้อความรหัสผ่านในครั้งแรกที่ใช้ ssh-key ในระหว่างการเข้าสู่ระบบและ เก็บคีย์ส่วนตัวที่ถอดรหัสไว้ในหน่วยความจำจนกระทั่งสิ้นสุดเซสชัน
ssh-key พร้อมข้อความรหัสผ่านด้วย ssh-ident
ssh-ident
เป็นยูทิลิตี้ที่สามารถจัดการssh-agent
ในนามของคุณและโหลดตัวตนตามความจำเป็น มันจะเพิ่มปุ่มเพียงครั้งเดียวที่พวกเขามีความจำเป็นโดยไม่คำนึงถึงวิธีการหลายขั้ว, SSH ssh-agent
หรือเข้าสู่ระบบการประชุมที่จำเป็นต้องมีการเข้าถึง นอกจากนี้ยังสามารถเพิ่มและใช้ตัวแทนที่แตกต่างกันและชุดคีย์ที่แตกต่างกันขึ้นอยู่กับโฮสต์ที่เชื่อมต่อกับหรือไดเรกทอรี ssh ถูกเรียกใช้จาก สิ่งนี้ช่วยให้สามารถแยกคีย์เมื่อใช้ตัวแทนการส่งต่อกับโฮสต์ที่แตกต่างกัน นอกจากนี้ยังอนุญาตให้ใช้หลายบัญชีในเว็บไซต์เช่น GitHub
หากต้องการเปิดใช้งานให้ssh-ident
ติดตั้งและเพิ่มนามแฝงต่อไปนี้ใน~/bash_profile
:
alias ssh='/path/to/ssh-ident'
ssh-key พร้อมข้อความรหัสผ่านด้วย keychain
keychain
เป็นยูทิลิตี้ขนาดเล็กที่จัดการssh-agent
ในนามของคุณและช่วยให้การssh-agent
ยังคงทำงานเมื่อสิ้นสุดเซสชั่นการเข้าสู่ระบบ เมื่อเข้าสู่ระบบในภายหลังkeychain
จะเชื่อมต่อกับssh-agent
อินสแตนซ์ที่มีอยู่ ในทางปฏิบัติหมายความว่าต้องป้อนวลีรหัสผ่านเฉพาะในระหว่างการเข้าสู่ระบบครั้งแรกหลังจากรีบูต ในการเข้าสู่ระบบครั้งต่อไปจะใช้รหัสที่ไม่ได้เข้ารหัสจากssh-agent
อินสแตนซ์ที่มีอยู่ สิ่งนี้ยังมีประโยชน์สำหรับการอนุญาตให้ใช้การพิสูจน์ตัวตน RSA / DSA แบบcron
ไม่ใช้รหัสผ่านในงานโดยไม่มีรหัสผ่าน ssh-keys
หากต้องการเปิดใช้งานให้keychain
ติดตั้งและเพิ่มสิ่งต่อไปนี้เพื่อ~/.bash_profile
:
eval `keychain --agents ssh --eval id_rsa`
จากมุมมองด้านความปลอดภัยssh-ident
และkeychain
แย่กว่าssh-agent
อินสแตนซ์ที่ จำกัด อายุการใช้งานของเซสชันที่ระบุ แต่จะให้ความสะดวกในระดับสูง เพื่อปรับปรุงความปลอดภัยของkeychain
บางคนเพิ่ม--clear
ตัวเลือกในการขอ~/.bash_profile
พวงกุญแจของพวกเขา ด้วยการทำข้อความรหัสผ่านนี้จะต้องป้อนอีกครั้งในการเข้าสู่ระบบดังกล่าวข้างต้น แต่cron
งานจะยังคงมีการเข้าถึงกุญแจที่ไม่ได้เข้ารหัสหลังจากที่ผู้ใช้ออกจากระบบ keychain
หน้าวิกิพีเดียมีข้อมูลเพิ่มเติมและตัวอย่าง
ssh-key โดยไม่ต้องใช้วลีรหัสผ่าน
จากมุมมองด้านความปลอดภัยนี่เป็นตัวเลือกที่แย่ที่สุดเนื่องจากคีย์ส่วนตัวไม่มีการป้องกันอย่างสมบูรณ์ในกรณีที่มีการเปิดเผย อย่างไรก็ตามนี่เป็นวิธีเดียวที่จะทำให้แน่ใจว่าไม่จำเป็นต้องป้อนข้อความรหัสผ่านอีกครั้งหลังจากรีบูต
ssh-key พร้อมวลีรหัสผ่าน, พร้อม ssh-agent
, ส่งข้อความรหัสผ่านไปยัง ssh-add
จากสคริปต์
ในขณะที่มันอาจจะดูเหมือนเป็นความคิดที่ตรงไปตรงมาผ่านรหัสผ่านไปssh-add
จากสคริปต์เช่นecho "passphrase\n" | ssh-add
นี้ไม่ได้เป็น straighforward ที่ดูเหมือนว่าเป็นssh-add
ไม่ได้อ่านข้อความรหัสผ่านจากstdin
แต่เปิด/dev/tty
โดยตรงสำหรับการอ่าน
นี้สามารถทำงานรอบด้วยexpect
ซึ่งเป็นเครื่องมือสำหรับการทำงานอัตโนมัติใช้งานแบบโต้ตอบ ด้านล่างเป็นตัวอย่างของสคริปต์ที่เพิ่ม ssh-key โดยใช้วลีรหัสผ่านที่เก็บไว้ในสคริปต์:
#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "passphrase\n";
expect "Identity added: /home/user/.ssh/id_rsa (/home/user/.ssh/id_rsa)"
interact
โปรดทราบว่าเนื่องจากข้อความรหัสผ่านถูกเก็บไว้ในสคริปต์ในมุมมองด้านความปลอดภัยจึงแทบจะดีกว่าการใช้รหัสผ่าน ssh-key หากจะใช้วิธีนี้เป็นสิ่งสำคัญเพื่อให้แน่ใจว่าexpect
สคริปต์ที่มีวลีรหัสผ่านนั้นมีการตั้งค่าการอนุญาตที่เหมาะสมทำให้สามารถอ่านได้เขียนได้และรันได้โดยเจ้าของกุญแจเท่านั้น