วิธี ssh ไปยังเซิร์ฟเวอร์ระยะไกลโดยใช้กุญแจส่วนตัว?


77

ฉันมีเซิร์ฟเวอร์สองเครื่อง เซิร์ฟเวอร์ทั้งสองอยู่ใน CentOS 5.6 ฉันต้องการ SSH จากเซิร์ฟเวอร์ 1 ถึงเซิร์ฟเวอร์ 2 โดยใช้คีย์ส่วนตัวที่ฉันมี (OpenSSH SSH-2 คีย์ส่วนตัว)

ฉันไม่รู้ว่าจะทำอย่างไรกับยูนิกซ์ แต่สิ่งที่ฉันทำบน windows โดยใช้ Putty คือการให้ฟีดคีย์ส่วนตัว OpenSSH ของฉันกับ putty-gen และสร้างไพรเวตคีย์ในรูปแบบ PPK

อย่างไรก็ตามฉันจะสร้าง bash script จากเซิร์ฟเวอร์ 1 ที่จะดำเนินการคำสั่งบางอย่างบนเซิร์ฟเวอร์ 2 ผ่าน SSH

ฉันจะ SSH ไปยังเซิร์ฟเวอร์ 2 โดยใช้ไฟล์กุญแจส่วนตัวของฉันจากเซิร์ฟเวอร์ 1 ได้อย่างไร


1
ในหลายระบบ Linux และ Unix สามารถทำได้โดยใช้ssh-copy-id user@machine
Paul Tomblin

คำตอบ:


66

คุณต้องใช้รหัสสาธารณะ SSH และคุณจะต้องใช้รหัสส่วนตัว ssh ของคุณ ssh_keygenคีย์สามารถสร้างขึ้นด้วย รหัสส่วนตัวจะต้องเก็บไว้ในเซิร์ฟเวอร์ 1 และรหัสสาธารณะจะต้องเก็บไว้ในเซิร์ฟเวอร์ 2

นี่เป็นคำอธิบายที่สมบูรณ์ใน manpage ของ openssh ดังนั้นฉันจะพูดถึงมันมากมาย คุณควรอ่านส่วน 'การรับรองความถูกต้อง' คู่มือ openSSH ก็ควรเป็นประโยชน์เช่นกัน: http://www.openssh.org/manual.html

โปรดระวังด้วย ssh เพราะสิ่งนี้จะส่งผลต่อความปลอดภัยของเซิร์ฟเวอร์ของคุณ

จากman ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

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

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

นี่คือกุญแจส่วนตัว ตอนนี้คุณจำเป็นต้องแนะนำพับลิกคีย์ของคุณบนเซิร์ฟเวอร์ 2 อีกครั้งข้อความจากman ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

วิธีที่ง่ายที่สุดที่จะทำให้สำเร็จคือการคัดลอกไฟล์ไปยังเซิร์ฟเวอร์ 2 และต่อท้ายไฟล์ไปยังไฟล์ authorized_keys:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

การอนุมัติผ่านคีย์สาธารณะต้องได้รับอนุญาตสำหรับภูต SSH man ssh_configให้ดู โดยปกติสามารถทำได้โดยเพิ่มคำสั่งต่อไปนี้ในไฟล์ปรับแต่ง:

PubkeyAuthentication yes

10
สวัสดีขอบคุณสำหรับความพยายาม แต่ฉันต้องการสิ่งนี้เท่านั้น ssh -i keyfileขอบคุณ!
Aivan Monceller

8
หลังจากสร้างกุญแจสำคัญในวิธีที่ง่ายที่สุดและแนะนำในการติดตั้งบนเซิร์ฟเวอร์อยู่กับ:ssh-copy-id ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com
Gilles

5
เป็นเรื่องที่น่าสนใจที่ทุกคนลืมพูดว่าคุณต้องทำงานssh-addหลังจากสร้างรหัสบนคอมพิวเตอร์ที่คุณเชื่อมต่อ นั่นคือสิ่งที่ทำให้ปวดหัวกับคนส่วนใหญ่
Luka

3
หมายเหตุสำคัญ: ไคลเอนต์สามารถมีคีย์ส่วนตัวจำนวนมากและเลือกตามชื่อโดยพลการในไฟล์ ~ / .ssh / config ส่วนตัวของพวกเขาที่ Host = ให้ชื่อโดยพลการ HostName ให้ชื่อหรือที่อยู่ IP, พอร์ต = พอร์ตเป้าหมาย ผู้ใช้คือชื่อผู้ใช้ปลายทางและ ItentityFile = ชี้ไปที่ไฟล์กุญแจส่วนตัว ชุดคุณลักษณะนี้มักถูกมองข้ามและเป็นทางออกของปัญหาการตั้งค่าหลายอย่างเช่นการมีคู่คีย์หลายคู่ที่ชนกันในพื้นที่ชื่อ
Richard T

1
เมื่อฉันลองและเชื่อมต่อกับ SSH โดยใช้$ ssh -i ~/.ssh/id_rsa myuser@ssh.myhost.comฉันได้รับข้อผิดพลาด myuser@ssh.myhost.com: Permission denied (publickey).ฉันได้สร้างคีย์เพิ่มการใช้งานในssh-addเครื่องและเพิ่มเป็นคีย์ที่ได้รับอนุญาตบนเซิร์ฟเวอร์ระยะไกล
Aaron Franke

21

ฉันใช้ ssh พร้อมกับตัวเลือก -i เพื่อเพิ่มกุญแจของคุณที่นี่

ถ้าคุณต้องการส่งผ่าน arg1, arg2 พร้อมกับไฟล์. sh เพียงส่งต่อหลังจากไฟล์. sh และใช้พื้นที่ใช้งานเพื่อแยก

ssh -i home/avr/new.pem ar@231.221.54.8 "/var/www/beta/betatolive.sh mmin 30"


1
อย่าลืมตั้งค่าสิทธิ์ที่ถูกต้อง:chmod 600 home/avr/new.pem
Brian Haak

16

สิ่งแรกที่คุณต้องทำคือให้แน่ใจว่าคุณได้ใช้คำสั่ง keygen เพื่อสร้างคีย์:

ssh-keygen -t rsa

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

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'

6
ลองโทรssh-copy-id user@hostnameแทน
อังเดร

7

ต่อท้ายพับลิกคีย์ ( id_[rd]sa.pub) สำหรับเครื่องต้นทางของคุณ (ที่คุณกำลังส่ง) ไปยัง~/.ssh/authorized_keysไฟล์ของเซิร์ฟเวอร์ปลายทางสำหรับชื่อผู้ใช้ที่คุณต้องการใช้ ssh ssh-keygenหากคุณได้สูญเสียคีย์สาธารณะคุณจะต้องการที่จะสร้างขึ้นมาใหม่ด้วย การใช้อาร์กิวเมนต์เริ่มต้นสำหรับสิ่งนั้นควรเป็นไปเพื่อวัตถุประสงค์ส่วนใหญ่ หากคุณต้องการคำแนะนำโดยละเอียดเพิ่มเติมมีบทเรียนมากมายที่คุณสามารถ google ได้


4

ssh-copy-id - ใช้คีย์ที่มีในเครื่องเพื่อให้สิทธิ์การเข้าสู่ระบบบนเครื่องระยะไกล

ใช้ssh-copy-idบนเซิร์ฟเวอร์ 1 สมมติว่าคุณมีคู่คีย์ (สร้างขึ้นด้วยssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

ตอนนี้คุณควรจะสามารถ ssh ลงในเซิร์ฟเวอร์ 2 ด้วย ssh โดยใช้คีย์ส่วนตัว

ssh -i ~/.ssh/id_rsa user@server2_hostname

แน่นอนถ้าคุณตรวจสอบcat ~/.ssh/authorized_keysบนเซิร์ฟเวอร์ 2 คุณจะเห็นรหัสสาธารณะถูกผนวกเข้ากับคุณ

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