เชื่อมต่อผ่าน SSH และพิมพ์รหัสผ่านโดยอัตโนมัติโดยไม่ต้องใช้กุญแจสาธารณะ


20

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

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

ลูกค้าที่จะใช้งานสคริปต์จะเรียกใช้ Ubuntu Server 8.04 เซิร์ฟเวอร์รัน Cygwin และ OpenSSH


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

1
ฉันถามมัน :-) serverfault.com/questions/125842/…ฉันต้องการเส้นทางหลบหนีในตอนนี้เพราะฉันตีหัวของฉันลงไประยะหนึ่ง แต่แน่นอนเป้าหมายของฉันคือการทำให้มันใช้งานได้ในระยะยาว
ลบ

คำตอบ:


22

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

sshpass -f file_with_password ssh user@server ls -la

นี้จะ ssh ls -laเข้าไปในเซิร์ฟเวอร์และเรียกใช้ สิ่งหนึ่ง แต่คุณต้อง SSH ด้วยตนเองลงในเซิร์ฟเวอร์แรก (ถ้าคุณยังไม่ได้ดำเนินการแล้ว) ~/.ssh/known_hostsเพื่อให้เซิร์ฟเวอร์ที่ได้รับเพิ่มให้กับคุณ หากคุณไม่ทำเช่นนั้นsshpassจะไม่ทำงาน


2
นี่ไม่ใช่ส่วนมาตรฐานของ OpenSSH และแท้จริงไม่มีเครื่องของฉัน (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) มีมัน ...
voretaq7

@ voretaq7: sshpass เป็นโครงการ SourceForge: sourceforge.net/projects/sshpass
kevinarpe

1
@KCArpe ฉันคิดว่าคุณพลาดจุดของฉัน ("โลกทั้งใบไม่ใช่เครื่อง Linux ของคุณ - ลองเลือกวิธีแก้ปัญหาที่ทำงานได้ในที่อื่น") การใช้SSH_ASKPASSตัวแปรเป็นโซลูชันทั่วไปที่ทำงานกับระบบใด ๆ กับ OpenSSH และไม่จำเป็นต้องติดตั้งซอฟต์แวร์เพิ่มเติม สำหรับเราบางคน (ในอุตสาหกรรมที่มีการควบคุม) การติดตั้งซอฟต์แวร์ใหม่จะก่อให้เกิดงานธุรการจำนวนมาก
voretaq7

@ voretaq7 การใช้SSH_ASKPASSไม่สามารถใช้ได้กับทุกระบบ keyboard-interactiveแม้ในกรณีที่ลูกค้าสนับสนุนมันจะไม่ทำงานหากใช้เซิร์ฟเวอร์ ฉันประสบปัญหาจริงเมื่อเขียนสคริปต์เพื่อแจกจ่ายauthorized_keysไฟล์ไปยังเครื่องฝังตัวจำนวนหนึ่ง
kasperd

8

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


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

พรุ่งนี้ฉันจะกลับมาพร้อมผลลัพธ์ :-) ขอบคุณสำหรับการตอบรับ!
ลบ

ดูเหมือนว่าจะทำงาน แต่ sshpass นั้นง่ายกว่าสำหรับกรณี IMHO นี้โดยเฉพาะ
ลบ

7

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

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

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