วิธีการจัดเก็บหนังสือรับรอง SSH ใน Terminal


33

ฉันใหม่กับ MacBook และฉันใช้ El Capitan

ฉันย้ายข้อมูลการใช้งานเครื่องจากพีซีไปยัง MacBook ฉันเป็นผู้ใช้ PuTTY และ SuperPuTTY มานานบนพีซี

ฉันต้องการสร้างและบันทึกข้อมูลรับรองการเข้าสู่ระบบไปยังเว็บเซิร์ฟเวอร์ของฉันใน MacBook Terminal เหมือนกับที่ฉันทำใน SuperPuTTY บนพีซี

เป็นไปได้หรือไม่ที่จะบันทึกข้อมูลรับรองการเข้าสู่ระบบเว็บเซิร์ฟเวอร์ใน Mac Terminal?

นี่คือวัตถุประสงค์โดยรวมของฉัน:

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

ssh -p 2200 root@123.456.789.012
Password: ****************************************************************

ฉันจัดการและเชื่อมต่อกับ 5 เว็บเซิร์ฟเวอร์ที่แตกต่างกันดังนั้นการเรียงลำดับและจัดระเบียบข้อมูลรับรองการเข้าสู่ระบบด้วยวิธีการเชื่อมต่อแบบสั้น / เร็วจะช่วยประหยัดเวลาได้มาก โดยเฉพาะอย่างยิ่งเพราะรหัสผ่านของฉันเป็นสตริง 64 ตัวอักษรที่มีความลับ


ฉันได้ลบความคิดเห็นในขณะที่รุ่นแก้ไขสามของ Tammy เคาะออกจากสวนสาธารณะในแง่ของความชัดเจนและมีประโยชน์ ทำได้ดี!
bmike

คำตอบ:


50

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

ก่อนอื่นคุณต้องสร้างรหัสสาธารณะ / ส่วนตัวเช่น:

ssh-keygen -t rsa

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

หากคุณมีคู่คีย์คุณสามารถข้ามขั้นตอนข้างต้นได้

ตอนนี้สมมติว่ามีคีย์ ssh ของคุณอยู่บน Mac ของ~/.ssh/id_rsa.pubคุณคุณสามารถติดตั้งบนเครื่องระยะไกลได้

cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

สำหรับตัวอย่างเซิร์ฟเวอร์ที่คุณอ้างถึงข้างต้นคำสั่งจะมีลักษณะดังนี้:

cat ~/.ssh/id_rsa.pub | ssh -p 2200 root@123.456.789.012 "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

คุณจะต้องป้อนรหัสผ่านสำหรับroot@123.456.789.012การทำสำเนานี้ แต่ควรจะเป็นครั้งสุดท้ายที่คุณต้องทำ สมมติว่าเซิร์ฟเวอร์ระยะไกลที่sshdมีการตั้งค่าที่จะทำภาครัฐและเอกชนตรวจสอบคีย์เมื่อคุณ ssh กล่องตอนนี้ก็ไม่ควรขอรหัสผ่านสำหรับการrootบัญชี - แทนมันจะขอรหัสผ่านสำหรับคุณที่สำคัญ อ่านต่อเกี่ยวกับวิธีการทำสิ่งนี้ที่คุณไม่จำเป็นต้องป้อนตลอดเวลา

ทำซ้ำด้านบนสำหรับทุกเครื่องที่คุณต้องการใช้กุญแจของคุณแทนรหัสผ่าน

โปรดทราบว่าทุกคนที่ได้รับ~/.ssh/id_rsaไฟล์ของคุณสามารถเข้าใช้งานเครื่องนี้ได้rootโดยไม่ต้องป้อนรหัสผ่านสำหรับเครื่องระยะไกล การป้องกันรหัสผ่านของไฟล์คีย์ทำให้แน่ใจว่าพวกเขาต้องการทราบรหัสผ่านสำหรับคีย์นั้นเพื่อใช้งาน ตรวจสอบให้แน่ใจว่าไฟล์นั้นปลอดภัย ใช้การเข้ารหัสดิสก์บน Mac ของคุณและให้สิทธิ์ในไฟล์และ~/.ssh/ไดเรกทอรีแน่น

เพื่อให้ใช้คีย์ได้ง่ายขึ้นโดยไม่ต้องป้อนรหัสผ่านทุกครั้ง OS X จะssh-agentดำเนินการตามพื้นหลังบนเครื่องของคุณ เอเจนต์นี้จะทำการคีย์แพร์ในครั้งแรกที่คุณใช้เพื่อให้คุณต้องป้อนรหัสผ่านของคุณเป็นครั้งคราว หากคุณนอนเฉยๆ mac ไม่ต้องรีสตาร์ทคุณสามารถใช้เวลานานโดยไม่ต้องป้อนรหัสผ่าน

คุณสามารถแคชคีย์ SSH ล่วงหน้าได้ด้วยการssh-agentเรียกใช้:

ssh-add

ตอนนี้คุณต้องจำรหัสผ่านที่สำคัญไม่ใช่รหัสผ่านบัญชีที่แตกต่างกันมากมาย ฉันมักจะเก็บรหัสผ่านที่สำคัญของฉันไว้ใน1Password (ไม่มีส่วนเกี่ยวข้อง) ทำให้ฉันจำรหัสผ่านที่ต้องจำได้ง่ายขึ้น จากนั้นฉันก็ค้นหาพวกเขาใน 1Password และตัดและวางในเทอร์มินัลในเวลาแปลก ๆ ที่ฉันรีสตาร์ท Mac ของฉันและทำให้การทำงานของฉันssh-agentจะเริ่มต้นใหม่

หากคุณรวมการคัดลอกคีย์ไปยังเครื่องระยะไกลด้วยโซลูชันการจัดการการเชื่อมต่อ Terminal.app ในคำถามนี้คุณจะมีบางสิ่งที่ใกล้เคียงกับ PuTTY สำหรับประสบการณ์การเชื่อมต่อ GUI


ที่ด้านเซิร์ฟเวอร์ให้ตรวจสอบ/etc/ssh/sshd_configและตรวจสอบให้แน่ใจว่า:

PubkeyAuthentication yes

เปิดใช้งานในการกำหนดค่า (โดยค่าเริ่มต้นใน OpenSSH) คุณอาจต้องการตั้งค่า:

PasswordAuthentication no

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

คุณจะต้องรีสตาร์ท sshd บนเครื่องหากคุณทำการเปลี่ยนแปลงใด ๆ กับไฟล์การกำหนดค่า


ขอบคุณ @IamC - คำตอบนี้ยอดเยี่ยมและฉันมั่นใจว่าจะได้ผล ฉันสร้างบัญชีการแลกเปลี่ยนสแต็คที่นี่ใน Mac Channel เมื่อเช้านี้เพื่อดูว่าฉันสามารถหาวิธีที่ง่ายและรวดเร็วในการบันทึกข้อมูลรับรองการเข้าสู่ระบบใน Terminal หรือบน Mac อย่างใด ดูเหมือนว่าการทำเช่นนั้นมีความซับซ้อนอย่างมากและไม่ใช่ทางออกสำหรับฉัน นี่คือเหตุผล: <more>
tammy

<ต่อเนื่อง> ฉันมีการเข้าถึงบรรทัดคำสั่งไปยังเว็บเซิร์ฟเวอร์จำนวนหนึ่ง (5 ตัวทั้งหมด) ฉันมีคอมพิวเตอร์ตั้งโต๊ะที่สำนักงานที่ทำงานโดยใช้ SSH (ผ่าน PuTTY) เพื่อเข้าถึงเว็บเซิร์ฟเวอร์เหล่านี้ ฉันมีแล็ปท็อปพีซีขนาดใหญ่ที่สำนักงานที่บ้านของฉันพร้อม SSH (ผ่าน PuTTY) เพื่อเข้าถึงเว็บเซิร์ฟเวอร์เหล่านี้ ฉันเพิ่งซื้อ MacBook Air สำหรับการเดินทางและการเยี่ยมชมสถานที่ของลูกค้า มันสมบูรณ์แบบสำหรับความต้องการเฉพาะนั้น ฉันหวังว่าจะทำให้การเชื่อมต่อ SSH กับเซิร์ฟเวอร์เป็นเรื่องง่ายเหมือนผ่าน PuTTY และ SuperPuTTY บนพีซี <more>
แทมมี่

<ต่อเนื่อง> แต่ฉันไม่สามารถผ่านเส้นทางกุญแจสาธารณะได้เพราะฉันต้องเปลี่ยนวิธีการทำงานของ PuTTY ในบ้านของฉันและพีซีในที่ทำงาน มันเป็นเรื่องที่ยุ่งยากเกินกว่าที่จะทำให้ Mac ทำงานเหมือนพีซีของฉันดังนั้นฉันคิดว่าฉันจะต้องติดกับกระบวนการคัดลอกและวางเพื่อเชื่อมต่อจาก Mac ของฉัน ขอขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันซาบซึ้งมากที่คุณช่วยฉันพยายามทำให้กระบวนการของฉันง่ายขึ้น
แทมมี่

2
@tammy คุณสามารถปล่อยให้PasswordAuthentication yesฝั่งเซิร์ฟเวอร์และ PuTTY จะทำงานต่อไปเหมือนที่เคยมีในเครื่อง Windows ของคุณ นี่ไม่ใช่ / หรือสถานการณ์ - คุณสามารถอนุญาตการรับรองความถูกต้องทั้งสองแบบบนเซิร์ฟเวอร์ PuTTY ยังสนับสนุนการอนุญาตคีย์สาธารณะ / ส่วนตัวเช่น FWIW นี้ คุณสามารถคัดลอก~/.ssh/id_rsa*ไฟล์ไปยังเครื่อง Windows ของคุณและนำเข้าไปใน PuTTY เพื่อตรวจสอบสิทธิ์ไปยังเซิร์ฟเวอร์ PuTTY ภายใต้ฝากระโปรงใช้ไลบรารี OpenSSH เดียวกันเพื่อเชื่อมต่อsshกับ OS X
Ian C.

1
ssh-addยังคงทำงานได้แม้ใน Sierra (OS X 10.12) ขอบคุณ
SaxDaddy

4

คุณสามารถใช้ sshpass เพื่อบันทึกรหัสผ่านและไม่ต้องแทรกทุกครั้งที่ไม่ใช่วิธีปฏิบัติที่ดี (ปัญหาด้านความปลอดภัย)

ทำตามคำแนะนำสำหรับการติดตั้ง mac os x ที่: https://gist.github.com/arunoda/7790979

เมื่อคุณติดตั้ง sshpass แล้ว sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no root@123.456.789.012:2200

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


1
ฉันรู้สึกว่าตัวเองโง่เกินไป ฉันเดาว่าใช้พีซีที่มี PuTTY และ SuperPuTTY แค่ทำให้ฉันห่างจากบรรทัดคำสั่งพื้นฐานมากเกินไป ฉันแก้ไข OQ ด้วยวัตถุประสงค์โดยรวมของฉัน ได้ดู
แทมมี่

ฉันสมมติว่าตอนนี้คุณสามารถเชื่อมต่อกับ root@123.456.789.012 และเพียงต้องการให้กระบวนการเป็นแบบอัตโนมัติ คุณพื้นไม่ต้องการที่จะพิมพ์ในแต่ละครั้งssh -p 2200 root@123.456.789.012และPassword: **********************?
enzo

ssh-copy-idไม่ได้เป็นส่วนหนึ่งของการกระจาย OS X มาตรฐาน
Ian C.

@IanC ฉันคิดว่าฉันลืมว่าฉันติดตั้งมันด้วยการชง จะแก้ไขคำตอบของฉัน
enzo

คุณเข้าใจ @maetsoh - นั่นคือสิ่งที่ฉันต้องการบรรลุที่นี่
แทมมี่

1

นอกจากคีย์สาธารณะ / ส่วนตัวไฟล์. ssh / config สามารถกำหนดค่าเพื่อให้ง่ายต่อการใช้คำสั่ง ssh เช่นนามแฝง defaut ผู้ใช้ / พอร์ตต่อเซิร์ฟเวอร์ตัวเลือก ssh คำสั่งพร็อกซี ...

โดยพื้นฐานแล้วสิ่งที่ซับซ้อนที่คุณสามารถใส่คำสั่ง ssh สามารถอยู่ในไฟล์นี้ได้เช่นกัน


0

ฉันได้ย้าย Putty to Mac เป็นชุดแอปพลิเคชันดั้งเดิมดังนั้นไม่จำเป็นต้องมี macports หรือเทอร์มินัลหากไม่ใช่ผู้ใช้ทางเทคนิคของคุณ

ข้อมูลเพิ่มเติมเกี่ยวกับภาพหน้าจออยู่ที่นี่: http://www.wine-reviews.net/2016/08/putty-for-mac-os-x-now-available.html

ไชโย


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