ฉันจะเพิ่มข้อมูลประจำตัวสำหรับ SSH อย่างถาวรได้อย่างไร


37

ฉันจำเป็นต้องเรียกใช้ssh-add <key>ทุกครั้งที่ฉันต้องการ ssh เข้าสู่เว็บเซิร์ฟเวอร์ มีวิธีเพิ่ม ID อย่างถาวรหรือไม่ดังนั้นฉันไม่จำเป็นต้องเพิ่มข้อมูลประจำตัวในการเข้าสู่ระบบแต่ละครั้งหรือไม่

แก้ไข: กุญแจเป็นไฟล์ pem ที่ฉันได้ดาวน์โหลดจากบริการคลาวด์

คำตอบ:


40

สร้างคีย์ของคุณเหมือนปกติ: ssh-keygenจากนั้นวางกุญแจนั้นไปยังรีโมตเซิร์ฟเวอร์ด้วยssh-copy-idซึ่งจะซิงค์กับคีย์ที่ยอมรับของรีโมตเซิร์ฟเวอร์

ssh-keygen
ssh-copy-id user@host

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

โดยค่าเริ่มต้นมันจะคัดลอกคีย์. pub ทั้งหมดของคุณไปยังเซิร์ฟเวอร์ระยะไกล หากคุณเพิ่งสร้างกุญแจด้วยssh-keygenนี่จะไม่เป็นปัญหา (เพราะคุณมีเพียงปุ่มเดียว!) อย่างไรก็ตามหากคุณมีหลายคีย์คุณสามารถคัดลอกเฉพาะคีย์ที่มีการ-iตั้งค่าสถานะ

ssh-copy-id -i ~.ssh/key_name.pub user@host

การแทนที่key_name.pubด้วยชื่อของคีย์


4
สำหรับใครบางคนอย่างฉัน (หรือผู้ถามคำถาม) ซึ่งมีเพียงการเปิดเผยของ ssh เท่านั้นที่ใช้เพื่อเข้าถึงเซิร์ฟเวอร์ที่โฮสต์บนคลาวด์ซึ่งบริการเว็บสร้างคีย์และมอบคีย์ให้ฉัน (ในกรณีของฉันเซิร์ฟเวอร์ AWS) คำตอบนี้ยากที่จะ เข้าใจโดยไม่ต้องทำการวิจัยพื้นหลังที่สำคัญ ฉันไม่เคยใช้ssh-keygenหรือssh-copy-idตัวอย่างเช่น ในอีกด้านหนึ่งคำตอบเช่นนี้ชัดเจนและมีประโยชน์สำหรับฉันเมื่อฉันได้รับความรู้ ขึ้นอยู่กับคุณว่าคุณต้องการปรับแต่งคำตอบของคุณไม่ว่าจะในทางใดก็ตามเพื่อช่วยเหลือคนที่ไม่รู้เช่นฉัน :)
ทำเครื่องหมาย Amery

คำตอบจะถือว่าฉันต้องการสร้างคีย์ใหม่ จะทำอย่างไรถ้าฉันต้องการลงทะเบียนคีย์ที่มีอยู่กับพวงกุญแจ
donquixote

@donquixote: ดูคำตอบด้านล่างโดย user626052
naught101

7

คุณสามารถสร้างคีย์ ssh ด้วยคำสั่ง:

ssh-keygen

จากนั้นคุณสามารถคัดลอกคีย์ของคุณไปยังเซิร์ฟเวอร์ด้วย:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

ตอนนี้คุณสามารถเข้าสู่เว็บเซิร์ฟเวอร์ของคุณโดยอัตโนมัติ


1
หากต้องการคัดลอกคีย์ไปยังเซิร์ฟเวอร์คุณสามารถใช้ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameหรือ~/.ssh/id_rsa.pubตามลำดับ จริงๆแล้วถ้าคุณใช้ชื่อเริ่มต้นสำหรับไฟล์คีย์คุณไม่จำเป็นต้องระบุมัน
Carsten Thiel

5

ใส่สิ่งนี้ในของคุณ ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 

3
นี่เป็นคำตอบเดียวที่จริงตอบคำถาม ส่วนอื่น ๆ เพิ่งเพิ่มคีย์สาธารณะเริ่มต้นไปยังเซิร์ฟเวอร์เป้าหมายเดียวซึ่งน่ารำคาญถ้าคุณมีสอง + แยกสำหรับชุดเซิร์ฟเวอร์ที่แตกต่างกัน
naught101

3

หากคีย์ของคุณไม่มีรหัสผ่านและตั้งชื่อเป็นหนึ่งในไฟล์ ssh จะพยายามค้นหาเมื่อระบุ ( ~/.ssh/id_dsaหรือ~/.ssh/id_rsa) คุณไม่ควรต้องเพิ่มลงในเอเจนต์ของคุณ

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

IMHO คีย์ส่วนตัวที่ไม่ใช้รหัสผ่านถือเป็นการปฏิบัติที่ไม่ดีและควรใช้กับสภาพแวดล้อมที่~/.ssh/authorized_keysมีข้อ จำกัด มากเท่านั้น


1
ssh-agent สามารถเก็บคีย์ส่วนตัวที่ถอดรหัสของคุณในขณะที่คุณลงชื่อเข้าใช้หากเปิดใช้งาน gnome-keyring ยังสามารถใช้รหัสผ่านเข้าสู่ระบบของคุณได้ โอ้และ ssh-copy-id สามารถคัดลอกกุญแจสาธารณะของคุณไปยังเซิร์ฟเวอร์ได้เช่นกัน
Frank

2

เขียนเชลล์สคริปต์แบบสั้นซึ่งจะรัน ssh-add จากนั้นเชื่อมต่อดังต่อไปนี้:

ssh-add ~/.ssh/your-key
ssh user@remotehost

จากนั้นคุณสามารถ ssh เข้าสู่โฮสต์ของคุณด้วยคำสั่งเดียว


1

สำหรับ AWS ดาวน์โหลดคีย์ pem และเรียกใช้:

ssh-add /path/to/pemfile.pem

ที่ทำงานสำหรับฉัน Ubuntu 18.04 แหล่งที่มาไม่จำเป็นต้องมีอะไรอีก

หมายเหตุ : อย่างไรก็ตามสิ่งสำคัญคือต้องตั้งค่าการอนุญาตเป็น 400 ก่อนดำเนินการ

chmod 400 /path/to/pemfile.pem

หากไม่ใช่คุณจะได้รับข้อผิดพลาด:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
คำเตือน: ไฟล์ลับส่วนตัวที่ไม่มีการป้องกัน! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ @@@@@@@@@ การอนุญาต 0664 สำหรับ '/home/toing_toing/blablabla.pem' นั้นเปิดเกินไป จำเป็นต้องให้ผู้อื่นไม่สามารถเข้าถึงไฟล์กุญแจส่วนตัวของคุณได้ คีย์ส่วนตัวนี้จะถูกละเว้น



-2

คุณกำลังพูดเกี่ยวกับ Amazon Cloud ใน ~ / .bashrc ของคุณสร้างตัวแปรสภาพแวดล้อม:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

ใช่ฉันพูดถึงคลาวด์ แต่นี่เป็นคู่คีย์สำหรับ ssh ในอินสแตนซ์และตัวแปรสภาพแวดล้อมข้างต้นจำเป็นต้องใช้ api-tools :)
theTuxRacer

ตกลง. ดังนั้นสร้างคีย์ RSA โดยไม่ต้องใช้รหัสผ่าน: 'ssh-keygen -t rsa' จากนั้นทำการเชื่อมต่อพับลิกคีย์สาธารณะที่สร้างขึ้น (~ / .ssh / id_dsa.pub) กับไฟล์ ~ / .ssh / authorized_keys ของเซิร์ฟเวอร์ระยะไกล หนึ่งซับเพื่อบรรลุเป้าหมายนี้ได้รับจากหลาย ๆ คน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.