เพิ่มรหัสผ่านไปที่. ssh / config


24

ฉันใช้ Ubuntu 12.04 ฉันใช้ ssh สำหรับเชื่อมต่อกับเซิร์ฟเวอร์หลาย ๆ ตัวต่อวันดังนั้นฉันจึงใส่พารามิเตอร์ของพวกเขาในไฟล์. ssh / config ; อย่างนี้ :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

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


10
นี่คือสิ่งที่คู่กุญแจมีไว้สำหรับ
Michael Hampton

คำตอบ:


31

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

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


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

1
ค่อนข้างไม่ปลอดภัย สิ่งเดียวที่จะแนะนำในสคริปต์นั้นเพื่อล็อคไฟล์นั้นด้วยสิทธิ์ไฟล์ที่ยากลำบาก
Danila Ladner

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

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

20

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

ฉันต้องการตั้งค่านี้เนื่องจากฉันไม่คิดว่าสวิตช์ 2950 ของฉันรองรับคีย์ส่วนตัว / สาธารณะและฉันหวังว่าในบางจุดที่จะได้รับความรู้นั้น แต่ฉันยังไม่ได้มี

การใช้นามแฝงและ sshpass นี้สามารถทำได้

  1. ติดตั้ง sshpass
  2. แก้ไขไฟล์. ssh / configของคุณเพื่อรวมชื่อผู้ใช้ตามที่ระบุในคำถาม
  3. เพิ่มนามแฝงไปยังเทอร์มินัลของคุณ (ฉันใช้. bashrc และจะแนะนำให้เทียบกับการตั้งค่ามืดมน)
  4. ใช้นามแฝงเพื่อเข้าสู่เป้าหมาย

นามแฝงตัวอย่างของฉันคือ:

alias ssc='sshpass -pcisco ssh'

ที่ "ซิสโก้" เป็นรหัสผ่าน หมายเหตุไม่มีช่องว่างระหว่าง -p และรหัสผ่าน

การใช้งานคือ (อ้างอิงคำถาม):

ssc server1

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


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

Works! น่ากลัว
ราหุล

ฉันขอแนะนำให้แทนที่นามแฝงด้วยเชลล์สคริปต์ที่สมบูรณ์ ที่จะให้โอกาสในการเลือกไฟล์รหัสผ่านแบบไดนามิกที่จะใช้ขึ้นอยู่กับพารามิเตอร์โฮสต์
7heo.tk

หนึ่งได้เป็นอย่างดีอาจทำให้ช่องว่างระหว่าง -p และรหัสผ่านในขณะที่มันมักจะเป็นกรณีที่มีโปรแกรม CLI ...
masterxilo

10

ใช่ดังกล่าวข้างต้นไม่มีวิธีการบันทึกรหัสผ่านเพียงแค่ ฉันจะแนะนำให้ใช้คีย์ ssh เพื่อขออนุมัติ

ก่อนอื่นสร้างคีย์ของคุณ:

ssh-keygen

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

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

นั่นคือทั้งหมดที่ คุณจะไม่ถูกถามถึงรหัสผ่านอีกครั้ง

ฉันขอแนะนำให้ลบการอนุมัติรหัสผ่านโดยทั่วไป แต่ขึ้นอยู่กับคุณ


1
ขอบคุณสำหรับการอ้างอิงถึง ssh-copy-id! ฉันเคยใช้การคุมกำเนิดเช่นsshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"นี้ แต่โปรแกรมนี้สะอาดและทำให้ความตั้งใจชัดเจน
masterxilo

3

ไม่มีวิธีการทำเช่นนี้กับ ssh มันไม่ปลอดภัยเท่าที่จะทำได้

ดังที่ Danila พูดถึงคุณสามารถใช้สคริปต์ที่คาดหวังได้ แต่ฉันก็ไม่รำคาญ

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


VisualStudio มีแนวคิดของโทเค็นการเข้าถึงส่วนบุคคลซึ่งเป็นเหมือนรหัสผ่านเฉพาะแอปที่คุณลักษณะนี้จะเป็นประโยชน์
spuder

1

ฉันใช้สคริปต์นี้จาก~/.local/binไดเรกทอรี

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

ซึ่งอนุญาตให้ฉันระบุวลีรหัสผ่านเช่นเดียวกับ#PS <password>ใน.ssh/configไฟล์

แต่อย่างที่ทุกคนบอกว่าควรใช้ssh-keysด้วยssh-agentเมื่อเป็นไปได้


0

วิธีที่ถูกต้องในการจัดการสถานการณ์นี้คือการใช้ ssh-agent ตามเซสชัน นี่คือวิธี:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

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

ตกใจหลังจากนั้นไม่นานคำตอบนี้ไม่ได้อยู่ที่นี่!


เหตุผลที่ไม่มีอาจเป็นเพราะโปสเตอร์บอกว่าเขาไม่ต้องการใช้คู่คีย์สาธารณะ / ส่วนตัว
Jenny D พูดว่า Reinstate Monica

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

-1

คุณสามารถทำได้ในวิธีที่ปลอดภัยยิ่งขึ้นโดยใช้ sshpass

  1. ตั้งรหัสผ่านของคุณโดยไม่มีประวัติ

    ส่งออก PS = your_password ; history -d $ (ประวัติ 1)

  2. ตั้งค่านามแฝงโฮสต์ดังกล่าวใน ~ / .ssh / config

  3. ใช้ ssh pass เพื่อใช้ตัวแปรสภาพแวดล้อมและล็อกอินไปยังเครื่องที่ต้องการในคำสั่งเดียว

sshpass -p $ PS ssh host_alias

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


ไม่ปลอดภัย และมันค่อนข้างน่าเกลียด
7heo.tk

นั่นคือ "ทางออก" นานกว่าปัญหาใช่ไหม ขั้นตอนพิเศษทั้งหมดนั้นและคุณยังต้องพิมพ์sshpass -p $PS ...
Dan H
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.