ฉันจะตั้งค่าล็อกอิน SSH ที่ไม่มีรหัสผ่านได้อย่างไร


252

ฉันต้องการที่จะสามารถเข้าสู่ระบบจากระยะไกลผ่าน ssh โดยไม่ต้องใส่รหัสผ่านตลอดเวลา

  • ฉันจะตั้งค่าได้อย่างไร
  • จำเป็นต้องใช้คำสั่งอื่นเพื่อดำเนินการเซสชันที่ไม่มีรหัสผ่านหรือไม่?

คุณใช้ openssh หรือไม่ (ถ้าเป็นเช่นนั้นง่าย;))
Rinzwind

@Rinzwind ทำไมฉันจะรำคาญที่จะได้รับรุ่นที่เป็นกรรมสิทธิ์เมื่อ OpenSSH ติดตั้งไว้แล้ว?
Oxwivi

15
ฉันพยายามที่จะไม่ทำการโจมตี;)
Rinzwind

1
@ เควินโปรดอธิบายด้วยตัวคุณเอง เรากำลังพูดถึง SSH ไอเอ็นจีได้โดยไม่ต้องใช้รหัสผ่านซึ่งโดยทั่วไปการปฏิบัติที่ดี คุณหมายถึง ssh-ing เป็นรูทเชลล์หรือไม่? ไม่ครอบคลุมอยู่ในคำถามนี้
Oxwivi

@Oxwivi: ขออภัยนี่น่าจะเป็นความเห็นเกี่ยวกับคำตอบของ Ravindra ซึ่งมีการกำหนดเป้าหมายที่รูทล็อกอิน
Kevin

คำตอบ:


266

ตอบ

ดำเนินการคำสั่งนี้:

ssh-keygen

จากนั้นคุณจะต้องคัดลอกคีย์ใหม่ไปยังเซิร์ฟเวอร์ของคุณ :

ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"

หลังจากคัดลอกคีย์แล้ว ssh ลงในเครื่องตามปกติ:

ssh user@host

ตอนนี้คุณสามารถเข้าสู่ระบบโดยไม่ต้องป้อนรหัสผ่านจากเครื่องที่คุณดำเนินการคำสั่งที่

ตัวอย่าง

not-marco@rinzwind-desktop:~$ ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa): 
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo.        |
|*B.+ . .         |
|*=o .   o .      |
| = .     =       |
|. o     S        |
|E.               |
| o               |
|  .              |
|                 |
+-----------------+

not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password: 
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

คำอธิบาย

สิ่งนี้ถือว่าคุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ของคุณผ่าน SSH เรียบร้อยแล้ว

คุณจะต้องสร้าง SSH Keypair ซึ่งจะช่วยให้คุณระบุตัวคุณได้โดยไม่ต้องใช้รหัสผ่าน คุณสามารถเลือกที่จะปกป้องกุญแจด้วยรหัสผ่านได้หากต้องการ แต่สามารถเว้นว่างไว้ได้ทำให้สามารถเข้าถึง SSH ได้โดยไม่ต้องใช้รหัสผ่านทั้งหมด

  1. ขั้นแรกให้สร้าง SSH Keypair ของคุณโดยเรียกใช้ssh-keygenสิ่งนี้จะสร้างid_rsaและid_rsa.pubไฟล์ pubไฟล์สิ่งที่ไปในเซิร์ฟเวอร์คีย์ส่วนตัว ( id_rsa) เป็นสิ่งที่อยู่กับคุณและเป็นวิธีการที่คุณระบุตัวตน
  2. จากนั้นคัดลอกรหัสสาธารณะไปยังเซิร์ฟเวอร์ของคุณด้วยการssh-copy-id user@serverแทนที่ผู้ใช้ด้วยผู้ใช้ระยะไกลและเซิร์ฟเวอร์ด้วยชื่อ DNS เครื่องหรือที่อยู่ IP มันจะพร้อมท์ให้ใส่รหัสผ่าน SSH ของคุณป้อนรหัสผ่านและหากทุกอย่างสำเร็จคุณจะสามารถเข้าถึงเครื่องได้ssh user@serverโดยไม่ต้องใช้รหัสผ่าน

อ้างอิง


11
@Oxwivi คำตอบนี้เป็นวิธีที่ถูกต้องมากกว่าที่จะทำ - แต่ดูเหมือนอีกต่อไป สิ่งที่คุณต้องทำคือพิมพ์ssh-keygenตามคำแนะนำบนหน้าจอจากนั้นพิมพ์การssh-copy-id user@serverเปลี่ยนผู้ใช้ด้วยผู้ใช้ระยะไกลและเซิร์ฟเวอร์ด้วยเครื่องระยะไกล
Marco Ceppi

3
ฉันมีข้อผิดพลาดนี้ "ตัวแทนยอมรับความล้มเหลวในการเซ็นชื่อโดยใช้กุญแจ" ทุกครั้งเมื่อพยายามเข้าสู่ระบบหลังจากทำตามขั้นตอนนี้ การแก้ปัญหาคือการเรียกใช้ "> ssh-add" บนเครื่องท้องถิ่นและตอนนี้ฉันสามารถเข้าสู่เครื่องระยะไกลตามที่คาดไว้
jmbouffard

1
มันคุ้มค่าที่จะพูดถึงว่าถ้าคุณจำเป็นต้องใช้พอร์ตที่กำหนดเองสำหรับ @server ssh-copy-id "not-marco@127.0.0.1 -p 1234"คุณจะต้องทำเช่นนี้ด้วย:
s3m3n

@Rinzwind: นี่หมายความว่าฉันไม่สามารถพิสูจน์ตัวตนจากไคลเอนต์ / เครื่องที่ไม่รู้จักไปยังเซิร์ฟเวอร์ของฉันได้หากฉันปิดใช้งานการพิสูจน์ตัวตนรหัสผ่านและอนุญาตเฉพาะการตรวจสอบสิทธิ์คีย์เท่านั้น มีวิธีใดบ้างที่จะอนุญาตให้ล็อกอินจากเครื่องที่ไม่รู้จักโดยใช้ไพรเวตคีย์ที่สร้างขึ้นสำหรับไคลเอ็นต์ที่รู้จัก / ตั้งค่าคอนฟิกเพื่อสื่อสารกับเซิร์ฟเวอร์? ฉันหมายถึงมันเป็นกุญแจส่วนตัวแบบพกพา & สามารถใช้ในการตรวจสอบตัวเองกับเซิร์ฟเวอร์จากเครื่องอื่น ๆ ในกรณีฉุกเฉินหรือไม่?
Rajat Gupta

4
แต่เซิร์ฟเวอร์ยังคงขอรหัสผ่าน ,,,
Lerner Zhang

34

พิมพ์คำสั่งต่อไปนี้:

  1. ssh-keygen

    กดEnterปุ่มจนกว่าคุณจะได้รับพรอมต์

  2. ssh-copy-id -i root@ip_address

    (มันจะขอรหัสผ่านของระบบโฮสต์อีกครั้ง)

  3. ssh root@ip_address

ตอนนี้คุณควรจะสามารถเข้าสู่ระบบได้โดยไม่ต้องใช้รหัสผ่านใด ๆ


25

วิธีที่ฉันทำเช่นนี้มักจะเป็นดังนี้:

ssh-keygen -t rsa

(เมื่อได้รับแจ้งให้ใส่รหัสผ่านให้ปล่อยว่างไว้)

แล้ว: cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'

(สิ่งนี้ต้องการโฟลเดอร์. ssh เพื่อที่จะอยู่ในโฮมไดเร็กตอรี่ของชื่อโฮสต์เป้าหมาย, โดยใช้ไฟล์ authorized_keys ในนั้น)

แน่นอนแทนที่ชื่อผู้ใช้ด้วยชื่อผู้ใช้ที่ต้องการและชื่อโฮสต์ด้วยชื่อโฮสต์หรือที่อยู่ IP ที่ต้องการ

หลังจากนั้นเพียงแค่ SSH ไปที่กล่องเช่นเดียวกับที่คุณคุ้นเคย


แล้วคำสั่งtouchและchmodคำสั่งของ Rinzwind ล่ะ?
Oxwivi

7
คุณจะต้องเปลี่ยน.ssh/authorized_keysไฟล์เป็น 0600 มิฉะนั้นจะไม่สามารถใช้งานได้
Marco Ceppi

สิ่งนี้ช่วยได้จริงๆเพราะฉันไม่สามารถรับ ssh-copy-id เพื่อทำงานกับรูทบนเซิร์ฟเวอร์ของฉัน มันจะต้องเป็นรูทในสถานการณ์ที่ backuppc (หรือ daemon อื่น ๆ ) ต้อง ssh ไปยังเครื่องอื่น
อดัม

18

ปกติฉันจะใช้sshpassเพื่อติดตั้งsudo apt-get install sshpassและใช้งานแบบนี้

sshpass -p 'password' ssh your_username@your_server

6
ทำไมไม่ใช้คีย์ ssh?
enzotib

1
มันไม่ใช่สถานการณ์ "ทำไมไม่" มันยังคงทำงานได้อย่างสมบูรณ์แบบโดยไม่ต้องเพิ่มคีย์มันเป็นอีกวิธีที่ฉันจะบอก
Bruno Pereira

ขอบคุณสำหรับข้อมูลเกี่ยวกับ sshpass ไม่เคยได้ยินมาก่อน
Panther

7
คีย์ SSH เป็นคำตอบที่ "ถูกต้อง" แต่sshpassเป็นแฮ็คที่มีประโยชน์มากในกรณีที่คุณไม่สามารถเปลี่ยนวิธีการรับรองความถูกต้องบนเซิร์ฟเวอร์ระยะไกลได้!
Jacob Krall

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

10

ปิดใช้งานการพิสูจน์ตัวตนด้วยรหัสผ่าน

เนื่องจากผู้คนจำนวนมากที่ใช้เซิร์ฟเวอร์ SSH ใช้รหัสผ่านที่อ่อนแอผู้โจมตีออนไลน์จำนวนมากจะมองหาเซิร์ฟเวอร์ SSH จากนั้นเริ่มการเดารหัสผ่านแบบสุ่ม ผู้โจมตีสามารถลองใช้รหัสผ่านหลายพันรายการในหนึ่งชั่วโมงและเดาได้ว่าแม้รหัสผ่านที่แข็งแกร่งที่สุดจะได้รับเวลาเพียงพอ ทางออกที่แนะนำคือการใช้กุญแจ SSH แทนรหัสผ่าน เพื่อให้เดาได้ยากเหมือนคีย์ SSH ปกติรหัสผ่านจะต้องมีตัวอักษรและตัวเลขสุ่ม 634 ตัว หากคุณสามารถลงชื่อเข้าใช้คอมพิวเตอร์ด้วยรหัส SSH ได้ตลอดเวลาคุณควรปิดการใช้งานการตรวจสอบสิทธิ์ด้วยรหัสผ่านทั้งหมด

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

ขอแนะนำให้ปิดการใช้งานการตรวจสอบรหัสผ่านหากคุณไม่มีเหตุผลเฉพาะ

หากต้องการปิดใช้งานการตรวจสอบรหัสผ่านให้มองหาบรรทัดต่อไปนี้ในไฟล์ sshd_config ของคุณ:

#PasswordAuthentication yes

แทนที่ด้วยบรรทัดที่มีลักษณะดังนี้:

PasswordAuthentication no

เมื่อคุณบันทึกไฟล์และรีสตาร์ทเซิร์ฟเวอร์ SSH ของคุณแล้วคุณไม่ควรถามรหัสผ่านเมื่อคุณเข้าสู่ระบบ

https://help.ubuntu.com/community/SSH/OpenSSH/Configuring#disable-password-authentication


2
นี่เป็นคำตอบที่ถูกต้องที่สุด แต่ก็ปลอดภัย นอกจากนี้การปิดใช้งานการเข้าสู่ระบบรูทเป็นอีกหนึ่งที่ดี
FreeSoftwareServers

ไม่PasswordAuthentication noส่งผลกระทบต่อผู้ใช้ทุกคน? ถ้าไม่ฉันจะปิดมันสำหรับผู้ใช้ปกติได้อย่างไร ฉันไม่ต้องการที่จะ foobar มันและล็อคตัวเองออกมาอย่างสมบูรณ์
อดัม

เปิดเซสชัน ssh ไว้เพื่อให้คุณสามารถเปลี่ยนกลับได้ คุณต้องการปิดการใช้งานรหัสผ่านและรูท ใช่คุณสามารถ fubar มัน ไม่;)
พฤหัสบดีที่

ในช่วง SSH ผมมีข้อผิดพลาดด้วยPermission denied (publickey). PasswordAuthentication noฉันควรทำยังไงดี? ฉันจะเปลี่ยนPasswordAuthentication noโฮสต์อื่นหรือไม่
ParisaN

9

วิธีนี้เป็นวิธีเฉพาะสำหรับผู้ใช้ที่ใช้Windowsเพื่อsshไปยังเครื่องระยะไกลรวมถึงภาพบนคลาวด์บนAWS CloudและGCE Cloud

คำปฏิเสธ

เมื่อเร็ว ๆ นี้ใช้วิธีนี้ในการลงชื่อเข้าใช้รีโมตอิมเมจ vm ที่ปรับใช้ใหม่บน GCE


เครื่องมือที่ใช้:

  1. puttygen ดาวน์โหลด puttygen
  2. winscp ดาวน์โหลด winscp

ขั้นตอนในการดำเนินการ:

  1. สร้างคู่กุญแจสาธารณะ / ส่วนตัวโดยใช้ puttygen
  2. อัพโหลดกุญแจสาธารณะไปยังเซิร์ฟเวอร์ของคุณในคลาวด์หรือที่ตั้งระยะไกล

ทำอย่างไร:

1. สร้างคีย์ / คู่หรือใช้ไพรเวตคีย์ที่มีอยู่

หากคุณเป็นเจ้าของคีย์ส่วนตัว:

เปิดputtygenกดปุ่มโหลดและเลือก*.pemไฟล์ไพรเวตคีย์ ( )


หากคุณไม่ได้เป็นเจ้าของคีย์ส่วนตัว:

  • เปิดputtygen,
  • เลือกประเภทคีย์ที่ต้องการ SSH2 DSA (คุณอาจใช้ RSA หรือ DSA) ในส่วนของพารามิเตอร์ เป็นสิ่งสำคัญที่คุณจะต้องปล่อยให้ฟิลด์ข้อความรหัสผ่านว่างเปล่า
  • กดgenerateและปฏิบัติตามคำแนะนำเพื่อสร้างคู่กุญแจ (สาธารณะ / ส่วนตัว)

ตัวอย่างการสร้างคีย์รูป

(จากแหล่งที่ 1, ลิงค์ที่ระบุด้านล่าง)

2. สร้างไฟล์ใหม่ 'authorized_keys' (พร้อมnotepad)

คัดลอกข้อมูลพับลิกคีย์ของคุณจากส่วน "พับลิกคีย์สำหรับการวางลงในไฟล์ OpenSSH authorized_keys" ของ PuTTY Key Generator และวางข้อมูลคีย์ไปยังauthorized_keysไฟล์


ตรวจสอบให้แน่ใจว่ามีข้อความเพียงบรรทัดเดียวในไฟล์นี้


3. อัปโหลดคีย์ไปยังเซิร์ฟเวอร์ Linux

  • เปิด WinSCP
  • เลือกโปรโตคอลไฟล์ SFTP และเข้าสู่ระบบด้วยข้อมูลประจำตัว ssh ของคุณ
  • ในความสำเร็จคุณจะเห็นโครงสร้างไดเรกทอรีหลักที่เครื่องระยะไกลของคุณ

อัปโหลดไฟล์ authorized_keys ไปยังโฮมไดเร็กทอรีที่เครื่องระยะไกล


4. กำหนดสิทธิ์ที่เหมาะสม

สร้าง.sshไดเรกทอรี (หากไม่มีอยู่)


คัดลอกauthorized_keysไฟล์ไปยัง.sshไดเรกทอรี
(สิ่งนี้จะแทนที่authorized_keysไฟล์ใด ๆ ที่มีอยู่โปรดทราบสิ่งนี้)

หากมีไฟล์อยู่ให้เพิ่มเนื้อหาของไฟล์นี้ลงในไฟล์ที่มีอยู่


เรียกใช้คำสั่งเพื่อตั้งค่าการอนุญาต:

sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys

ตอนนี้คุณจะสามารถsshเข้าสู่เครื่องระยะไกลได้โดยไม่ต้องป้อนข้อมูลประจำตัวทุกครั้ง

อ่านเพิ่มเติม:


4

หากคุณสร้างคีย์สาธารณะสาธารณะ / ราคาแพงและเข้าสู่ระบบโดยใช้กุญแจสาธารณะที่สร้างขึ้นใหม่ของเราคุณไม่จำเป็นต้องพิมพ์รหัสผ่านของคุณ ขึ้นอยู่กับการกำหนดค่าของเอเจนต์ key-ring และ / หรือ ssh ของคุณคุณอาจต้องปกป้องคีย์ของคุณด้วยวลีรหัสผ่าน

นี่คือหนึ่งในวิธีการสั้น ๆมากมายสำหรับคุณ มันมีความสำคัญอย่างยิ่งต่อความปลอดภัยของวิธีการนี้ว่าคีย์ส่วนตัวที่สร้างขึ้นยังคงเป็นส่วนตัว! คุณไม่ควรแชร์กับใครหรืออนุญาตให้เข้าถึงได้ในทุก ๆ ความสามารถ

คำสั่งนี้สร้างคีย์ที่แข็งแกร่งพอสมควรใน~/.ssh/:

ssh-keygen -b 4096

ในคุณจะพบกุญแจสาธารณะของคุณเป็น~/.ssh/ id_rsa.pubเนื้อหาควรถูกผนวกเข้ากับauthorized_keysไฟล์เซิร์ฟเวอร์ของคุณโดยการส่งผ่านสื่อที่สามารถเคลื่อนย้ายได้ (ไดรฟ์ปากกา) หรือโดยการเปิดใช้งานการตรวจสอบรหัสผ่านบนเซิร์ฟเวอร์ในไม่ช้าจากนั้นใช้ssh-copy-id ~/.ssh/id_rsa.pub username@serverและปิดใช้งานอีกครั้ง

หากคุณเลือกที่จะรักษาความปลอดภัยรหัสของคุณด้วยวลีรหัสผ่าน (ในขั้นตอนแรก) คุณสามารถใช้ssh-agentหรือพวงกุญแจ Ubuntu เพื่อรักษาความปลอดภัย pharse นั้นในเครื่องเพื่อให้คุณไม่ต้องพิมพ์ตลอดเวลา


3

หากต้องการเพิ่มบางอย่าง:

  • Mac โดยค่าเริ่มต้นไม่มีssh-copy-idคุณจะต้องติดตั้งเอง:

    curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
    chmod +x /usr/local/bin/ssh-copy-id
    

หาข้อมูลเพิ่มเติมได้ที่นี่: https://github.com/beautifulcode/ssh-copy-id-for-OSX

  • หากคุณทำการส่งต่อพอร์ตคำสั่งควรเป็นดังนี้:

    ssh-copy-id "not-marco@127.0.0.1 -p 2222"
    

โปรดทราบว่าจำเป็นต้องใช้เครื่องหมายคำพูด


3

รีโมตล็อกอิน / คัดลอกโดยไม่ต้องใส่รหัสผ่าน

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

  1. เรียกใช้ ssh-keygen เพื่อสร้างไพรเวทคีย์และพับลิกเว้นแต่ว่าได้ทำไปแล้วบนเครื่องของคุณ $HOME/.sshเหล่านี้จะถูกเก็บไว้ในไฟล์ใน
  2. ผนวกเนื้อหาของไฟล์พับลิกคีย์เข้ากับไฟล์$HOME/.ssh/authorized_keysหรือ$HOME/.ssh/authorized_keys2บนเซิร์ฟเวอร์

โปรโตคอลการตรวจสอบมีสามประเภท คุณระบุประเภทเมื่อรัน ssh-keygen:

  1. SSH protocol รุ่น 1, RSA1:นี่คือตัวเลือกเริ่มต้นและผลลัพธ์ในไฟล์ identity (ไพรเวตคีย์ควรใช้chmod 0700เพื่อให้แน่ใจว่าไฟล์นี้ไม่สามารถอ่านได้สำหรับผู้อื่น) และidentity.pub (พับลิกคีย์)
  2. SSH protocol รุ่น 1, RSA : สิ่งนี้ได้มาจากการรันssh-keygen -t rsaและผลลัพธ์ในไฟล์id_rsa(ไพรเวตคีย์) และid_rsa.pub(พับลิกคีย์)
  3. SSH protocol รุ่น 1, DSA : สิ่งนี้ได้มาจากการรันssh-keygen -t dsaและผลลัพธ์ในไฟล์id_dsa(ไพรเวตคีย์) และid_dsa.pub(พับลิกคีย์)

เมื่อรัน ssh-keygen คุณสามารถพึ่งพาคำตอบเริ่มต้นได้ (หมายความว่าคุณไม่ให้ข้อความรหัสผ่าน) สิ่งนี้ทำให้การตั้งค่าทั้งหมดง่าย แต่ยังไม่ปลอดภัย

คุณสามารถระบุประเภทของคีย์ที่จะใช้โดยตัวเลือกเพื่อssh ; ssh -1บังคับให้ใช้คีย์RSA1 (รุ่นโปรโตคอล 1) ในขณะที่ssh -2บังคับให้sshลองใช้คีย์RSAหรือDSAเท่านั้น (รุ่นโปรโตคอล 2) ในตัวอย่างด้านล่างเราสร้างและติดตั้งคีย์ RSA1และDSAบนโฮสต์ระยะไกลเพื่อให้คุณมีความยืดหยุ่นมากขึ้น คุณสามารถสร้างไฟล์ปรับแต่งใน.sshไดเรกทอรีด้วยบรรทัด

Protocol 1,2

สิ่งนี้ทำให้sshลองเชื่อมต่อRSA1 (รุ่นโปรโตคอล 1) ก่อนRSA / DSA (รุ่นโปรโตคอล 2)

การใช้คีย์ RSA1

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"

ใช้ปุ่ม DSA

remote=user@remotehost   # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy DSA key: 
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"

นี่คือทั้งหมดที่คุณต้องทำถ้าคุณไม่ได้ใช้วลีรหัสผ่านเมื่อสร้างคีย์ คุณสามารถทดสอบการเชื่อมต่อโดยใช้ ssh $ ระยะไกลและดูว่าคุณสามารถเข้าสู่ระบบได้โดยไม่ต้องให้รหัสผ่าน (คุณอาจต้องใช้-1หรือ-2เป็นตัวเลือกในการssh ) แน่นอนสามารถทำขั้นตอนนี้ซ้ำสำหรับเครื่องที่คุณต้องการเข้าสู่ระบบ

ถ้าคุณไม่ใช้รหัสผ่านที่คุณจะต้องเรียกใช้โปรแกรมssh-agentที่จะเริ่มต้นเปลือกพิเศษตามด้วยssh-addการลงทะเบียนของคุณคีย์ / รหัสผ่านสำหรับการsshdร่วมกับ ดู man pages สำหรับโปรแกรมเหล่านี้สำหรับข้อมูลเพิ่มเติม

สคริปต์สำหรับการเชื่อมต่อที่ไม่มีรหัสผ่านอัตโนมัติ: ssh-no-password.sh

#!/bin/sh

# create ssh connections without giving a password

if [ $# -lt 1 ]; then
  echo Usage: $0 username@remotehost
  exit
fi
remote="$1"  # 1st command-line argument is the user@remotehost address
this=$HOST   # name of client host

# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
  echo "just type RETURN for each question:" # no passphrase - unsecure!!
  # generate RSA1, RSA and DSA keys:
  echo; echo; echo
  ssh-keygen
  echo; echo; echo
  ssh-keygen -t rsa
  echo; echo; echo
  ssh-keygen -t dsa
else
  # we have $HOME/.ssh, but check that we have all types of
  # keys (RSA1, RSA, DSA):
  if [ ! -f $HOME/.ssh/identity ]; then
     # generate RSA1 keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate RSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t rsa
  fi
  if [ ! -f $HOME/.ssh/id_rsa ]; then
     # generate DSA keys:
     echo "just type RETURN for each question:" # no passphrase - unsecure!!
     ssh-keygen -t dsa
  fi
fi


cd $HOME/.ssh

if [ ! -f config ]; then
  # make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
  echo "Protocol 1,2" > config
fi

# copy public keys (all three types) to the destination host:

echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi' 
# copy RSA1 key: 
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:

echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"

echo; echo; echo
echo "try an ssh $remote"

คัดลอกมาจาก: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html


1

ฉันต้องการเพิ่มคำตอบสำหรับผู้ที่อาจพบว่าพวกเขาควรป้อนรหัสผ่านแม้ว่าพวกเขาจะอ่านคำตอบทั้งหมดที่นี่เพราะคุณได้ตั้งค่า IdentitiesOnly เป็นใช่ และคำตอบที่นี่สามารถช่วยคุณประหยัดเวลาในการจัดการหลาย ๆ คีย์เป็นกุญแจสำหรับคอมไพล์หรือเซิร์ฟเวอร์

หลังจากฉันสร้างรหัสและคัดลอกไปยังเซิร์ฟเวอร์:

ssh-keygen  # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160

ฉันพบว่ามันใช้งานไม่ได้

จากนั้นฉันไปตรวจสอบ~/.ssh/configไฟล์บนไคลเอนต์ฉันเห็นสิ่งนี้ที่ด้านล่าง:

Host *
IdentitiesOnly yes

จากนั้นฉันจะเพิ่มสิ่งนี้ด้านบน:

Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something

ssh somenameฉันเพียงแค่สามารถเข้าสู่ระบบโดยการป้อน

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

โฮสต์คือชื่อที่คุณต้องการป้อนเมื่อคุณเชื่อมต่อเซิร์ฟเวอร์ในภายหลัง HostName เป็น ip ของเซิร์ฟเวอร์ ผู้ใช้คือชื่อผู้ใช้ที่คุณเข้าสู่เซิร์ฟเวอร์ และ identityfile เป็นไฟล์ที่คุณเก็บคีย์ที่คุณสร้างขึ้น

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