คุณจะตั้งค่า ssh เพื่อตรวจสอบสิทธิ์ผู้ใช้โดยใช้กุญแจแทนชื่อผู้ใช้ / รหัสผ่านได้อย่างไร
คุณจะตั้งค่า ssh เพื่อตรวจสอบสิทธิ์ผู้ใช้โดยใช้กุญแจแทนชื่อผู้ใช้ / รหัสผ่านได้อย่างไร
คำตอบ:
สำหรับผู้ใช้แต่ละราย: พวกเขาควรสร้าง (บนเครื่องท้องถิ่น) โดยใช้ keypair ของพวกเขาssh-keygen -t rsa
( rsa
สามารถถูกแทนที่ด้วยdsa
หรือrsa1
เกินไปแม้ว่าจะไม่แนะนำตัวเลือกเหล่านั้น) จากนั้นพวกเขาจำเป็นต้องใส่เนื้อหาของกุญแจสาธารณะ ( id_rsa.pub
) ลง~/.ssh/authorized_keys
ในเซิร์ฟเวอร์ที่ล็อกอิน
ฉันชอบssh-copy-idซึ่งเป็นสคริปต์ที่พบใน * nix โดยค่าเริ่มต้น (สามารถใส่ในMac OS Xได้ง่ายพอเช่นกัน) ซึ่งทำสิ่งนี้ให้คุณโดยอัตโนมัติ จากหน้าคน:
ssh-copy-id เป็นสคริปต์ที่ใช้ ssh เพื่อเข้าสู่เครื่องระยะไกล (สมมุติว่าใช้รหัสผ่านการเข้าสู่ระบบดังนั้นการตรวจสอบรหัสผ่านควรจะเปิดใช้งานเว้นแต่ว่าคุณได้ใช้รหัสประจำตัวหลายอย่างอย่างชาญฉลาด)
นอกจากนี้ยังเปลี่ยนสิทธิ์ของโฮมของผู้ใช้ระยะไกล, ~ / .ssh และ ~ / .ssh / authorized_keys เพื่อลบการเขียนกลุ่ม (ซึ่งจะป้องกันมิให้คุณเข้าสู่ระบบหาก sshd ระยะไกลมีการตั้งค่า StrictModes ในการกำหนดค่า)
หากได้รับตัวเลือก -i ไฟล์ข้อมูลประจำตัว (ค่าเริ่มต้นคือ ~ / .ssh / identity.pub) จะถูกใช้โดยไม่คำนึงว่ามีคีย์ใด ๆ ใน ssh-agent ของคุณหรือไม่
ไม่รับเลย เพียงสร้างคีย์และเริ่มต้นใช้งาน :) HOWTO นอกจากนี้คุณสามารถห้ามเข้าสู่ระบบด้วยรหัสผ่าน ในเช่น / etc / ssh / sshd_config:
PasswordAuthentication no
นี้ค่อนข้างตรงไปข้างหน้าจะทำอย่างไร - มีคำแนะนำแบบง่าย ๆ ที่จะพบได้ที่นี่
ประเด็นหลักคือ:
ssh-keygen
บนเครื่องของคุณ สิ่งนี้จะสร้างกุญแจสาธารณะและกุญแจส่วนตัวสำหรับคุณ~/.ssh/id_rsa.pub
) เข้าไป~/.ssh/authorized_keys
ในบนเครื่องระยะไกลสิ่งสำคัญคือให้จำไว้ว่าสิ่งนี้จะทำให้ทุกคนที่สามารถเข้าถึงคีย์ส่วนตัวบนเครื่องของคุณสามารถเข้าถึงเครื่องรีโมตเดียวกันได้ดังนั้นเมื่อสร้างคู่คีย์คุณอาจเลือกที่จะป้อนรหัสผ่านที่นี่เพื่อความปลอดภัยเป็นพิเศษ
สำหรับผู้ใช้ Windows ในการตั้งค่าผงสำหรับอุดรู
เพื่อสรุปสิ่งที่ผู้อื่นพูดการตั้งค่าคีย์ SSH นั้นง่ายและมีค่า
บนเครื่องที่คุณจะได้ SSHing จากคุณต้องสร้างคู่คีย์ของคุณ:
claudius:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/dinomite/.ssh/id_rsa): <ENTER>
Enter passphrase (empty for no passphrase): <PASSPHRASE>
Enter same passphrase again: <PASSPHRASE>
Your identification has been saved in /home/dinomite/.ssh/id_rsa.
Your public key has been saved in /home/dinomite/.ssh/id_rsa.pub.
The key fingerprint is:
a3:93:8c:27:15:67:fa:9f:5d:42:3a:bb:9d:db:93:db dinomite@claudius
เพียงกด Enter ที่บันทึกไว้และป้อนวลีรหัสผ่านเมื่อได้รับแจ้ง - ความนึกคิดนี้แตกต่างจากรหัสผ่านการเข้าสู่ระบบปกติของคุณทั้งบนโฮสต์ปัจจุบันและโฮสต์ที่คุณจะ SSHing
ถัดไปคุณต้องคัดลอกคีย์ที่คุณเพิ่งสร้างขึ้นเพื่อโฮสต์ที่คุณต้องการที่จะ SSH ไป ลีนุกซ์ส่วนใหญ่มีเครื่องมือssh-copy-id
สำหรับทำสิ่งนี้:
claudius:~$ ssh-copy-id caligula.dinomite.net
Now try logging into the machine, with "ssh 'caligula.dinomite.net'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
หากการแจกจ่ายของคุณไม่มีสิ่งนั้นคุณควรคัดลอกคีย์ไปยังโฮสต์ปลายทางและเพิ่มลงในไฟล์ (อาจมีอยู่) .ssh/authorized_keys
:
claudius:~$ scp .ssh/id_dsa.pub caligula.dinomite.net:
id_dsa.pub 100% 1119 1.1KB/s 00:00
claudius:~$ ssh caligula.dinomite.net
Last login: Sat May 9 10:32:30 2009 from claudius.csh.rit.edu
Caligula:~$ cat id_dsa.pub >> .ssh/authorized_keys
สุดท้ายเพื่อให้ได้ประโยชน์สูงสุดจากกุญแจ SSH คุณจะต้องเรียกใช้ตัวแทน SSH หากคุณใช้สภาพแวดล้อมเดสก์ท็อป (Gnome, KDE และอื่น ๆ ) เพียงแค่ออกจากระบบและกลับเข้ามาใหม่จะเริ่มตัวแทน SSH ให้คุณ ถ้าไม่ได้คุณสามารถเพิ่มต่อไปนี้เพื่อเปลือกของคุณแฟ้ม RC ( .bashrc
, .profile
ฯลฯ ):
SSHAGENT=/usr/bin/ssh-agent
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
eval `$SSHAGENT $SSHAGENTARGS`
trap "kill $SSH_AGENT_PID" 0
fi
นี่เป็นจุดประสงค์ของรายการตรวจสอบ ถ้าอย่างใดอย่างหนึ่งตามมันทีละจุด gotchas ที่พบมากที่สุดเพื่อเข้าสู่ระบบโดยไม่ใช้รหัสผ่านควรได้รับการคุ้มครอง ประเด็นเหล่านี้ส่วนใหญ่ถูกกล่าวถึงที่อื่น นี่คือการรวม
จะต้องมี~/.ssh
ไดเรกทอรีchmod 700
ในแต่ละเครื่องภายใต้บัญชีที่จะมาหรือรับการเชื่อมต่อ
ต้องสร้างคีย์ (ส่วนตัว) โดยไม่มีวลีรหัสผ่านหรือสามารถเริ่มทำงานเอเจนต์ซึ่งจะเก็บคีย์ถอดรหัสข้อความรหัสผ่านรุ่นที่ถอดรหัสไว้เพื่อให้ลูกค้าใช้ ssh-agent $SHELL
เริ่มต้นด้วยตัวแทน มันเป็น$SHELL
ส่วนที่ต้องใช้เวลาพอสมควรในการค้นหา ดู man page เนื่องจากมีรายละเอียดมากมายหากคุณต้องการใช้ตัวแทน
อย่าลืมว่าโดยค่าเริ่มต้นคีย์อ่อนแอ (<2048 บิต DSA) จะไม่ได้รับการยอมรับจาก sshd รุ่นล่าสุด
ต้องทำสิ่งต่อไปนี้บนเครื่องฝั่งไคลเอ็นต์เพื่อสร้างการเชื่อมต่อ
รหัสส่วนตัวของคุณจะต้องอยู่ใน~/.ssh/id_rsa
หรือ~/.ssh/id_dsa
ตามความเหมาะสม คุณอาจใช้ชื่ออื่น แต่จะต้องรวมอยู่ในตัวเลือก -i ในคำสั่ง ssh บนเครื่องต้นทางเพื่อระบุคีย์ส่วนตัวอย่างชัดเจน
chmod 600
คีย์ส่วนตัวของคุณจะต้อง
chmod 700
ตรวจสอบว่าโฮมโฟลเดอร์ของคุณ
ตอนนี้การอนุญาตให้เครื่องรับการร้องขอ โมเดลทั่วไปคือที่ผู้ดูแลระบบให้คุณเข้าถึงเครื่องที่คุณไม่ได้เป็นเจ้าของ (เช่นเว็บโฮสติ้งที่ใช้ร่วมกัน) ดังนั้นความคิดที่มี ssh คือการที่คุณให้กุญแจสาธารณะแก่ใครก็ตามที่ให้บัญชีแก่คุณ นั่นเป็นเหตุผลที่โดยทั่วไปคุณไม่ต้องใส่กุญแจส่วนตัวลงบนเครื่องรับคำขอ แต่ถ้าคุณต้องการให้เครื่องนี้ทำ ssh ด้วยเช่นกันคุณต้องถือว่าเป็นเครื่องกำเนิดที่มีขั้นตอนข้างต้น
~/.ssh/authorized_keys
ภายใต้บัญชีที่จะได้รับการเชื่อมต่อ คุณสามารถวางกุญแจอื่น ๆ ที่ได้รับอนุญาตให้เชื่อมต่อผ่านบัญชีนี้ได้ที่นี่เช่นกัน สิ่งที่ยุ่งยากโดยเฉพาะอย่างยิ่งถ้าคุณอยู่ใน vi และวางกุญแจลงในไฟล์จาก paste buffer ใน PuTTY คือ: คีย์เริ่มต้นด้วย "ssh-" หากคุณไม่ได้อยู่ในโหมดแทรกตัวแรก "s" จะใส่ vi ในโหมดแทรกและปุ่มที่เหลือจะดูดี แต่คุณจะพลาด "s" ที่จุดเริ่มต้นของคีย์ ฉันใช้เวลาหลายวันกว่าจะพบว่าchmod 600 ~/.ssh/authorized_keys
ผมชอบที่จะ อย่างน้อยต้องเป็น gwดังที่คนอื่น ๆ ได้กล่าวไว้ผู้ใช้ของคุณควรสร้างคู่คีย์สำหรับตนเองบนเครื่องไคลเอ็นต์ด้วย ssh-keygen และเพิ่มกุญแจสาธารณะของพวกเขาใน ~ / .ssh / authorized_keys บนเครื่องที่พวกเขาต้องการเข้าสู่ระบบ
สำหรับรายละเอียดเพิ่มเติม แต่ผมขอแนะนำให้SSH, The Secure Shell
มีคำแนะนำดีๆอยู่ที่นี่ดังนั้นฉันจะไม่พูดซ้ำ เมื่อคุณตั้งค่าเซิร์ฟเวอร์หนึ่งเครื่องเพื่ออนุญาตให้คุณลงชื่อเข้าใช้ด้วยคีย์คุณสามารถตั้งค่าให้ผู้อื่นทำเช่นเดียวกันด้วยสายการบินนี้:
remote=server1 server2 server3 server4
for r in $remote; do echo connecting to $r; tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh $r "tar zxf -; chmod 700 .ssh" ; done
เพียงแค่ cd ไปที่โฮมไดเร็กตอรี่ของคุณ, ให้นิยามตัวแปรรีโมตเป็นชื่อเซิร์ฟเวอร์หนึ่งชื่อหรือหลายชื่อ รหัสผ่านที่ขอจะเป็นรหัสผ่าน ssh ของคุณสำหรับเซิร์ฟเวอร์ระยะไกล แน่นอนว่าคุณสามารถใช้เวอร์ชันที่ง่ายขึ้นได้โดยไม่ต้องใช้ for-loop:
tar czf - ./.ssh/id*.pub ./.ssh/authorized_keys2 ./.ssh/config | ssh YOUR_SERVER_NAME_HERE "tar ztvf -; chmod 700 .ssh"
โปรดจำไว้: คัดลอกเฉพาะกุญแจสาธารณะของคุณเท่านั้น คุณไม่ต้องการให้กุญแจส่วนตัวของคุณนั่งอยู่บนเซิร์ฟเวอร์ที่ใครก็ตามที่มี sudo สามารถคัดลอกและบีบอัดข้อความรหัสผ่านของคุณ