ฉันจะทำให้ ssh ล้มเหลวแทนที่จะถามรหัสผ่านได้อย่างไรหากการรับรองความถูกต้องของรหัสสาธารณะล้มเหลว


107

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

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

คำตอบ:


138

สำหรับ OpenSSH มี BatchMode ซึ่งนอกเหนือจากการปิดใช้งานการแจ้งเตือนรหัสผ่านแล้วควรปิดการใช้งานการค้นหาข้อความรหัสผ่านสำหรับคีย์

BatchMode

หากตั้งค่าเป็น“ ใช่” การสืบค้นข้อความรหัสผ่าน / รหัสผ่านจะถูกปิดใช้งาน ตัวเลือกนี้มีประโยชน์ในสคริปต์และงานแบ็ตช์อื่น ๆ ที่ไม่มีผู้ใช้อยู่ในการจัดหารหัสผ่าน อาร์กิวเมนต์ต้องเป็น“ ใช่” หรือ“ ไม่” ค่าเริ่มต้นคือ“ ไม่”

ตัวอย่างการใช้งาน:

ssh -oBatchMode=yes -l <user> <host> <dostuff>

การรับรองความถูกต้องของรหัสสาธารณะที่ปิดใช้งานสำหรับฉัน อย่างไรก็ตามฉันระบุว่าเป็น ssh user @ host -C somecommand สิ่งที่ทำให้ฉันต้องทำงานหนักคือssh user@host -oPreferredAuthentications=publickey -C 'echo success'
AB Carroll

20

เพิ่มสิ่งต่อไปนี้ในของคุณ~/.ssh/config:

PasswordAuthentication no

และปิดการใช้งานตรวจสอบรหัสผ่านบนเซิร์ฟเวอร์เพิ่มบรรทัดเดียวกันเพื่อและเริ่มต้นใหม่/etc/ssh/sshd_configsshd


7
หากคุณไม่ต้องการปิดใช้งานการตรวจสอบรหัสผ่านสำหรับการเชื่อมต่อไคลเอนต์ ssh ทั้งหมดคุณยังสามารถระบุตัวเลือกในบรรทัดคำสั่ง เพิ่ม '-oPasswordAuthentication = no' ในคำสั่ง ssh ของคุณ
cas s

7
นี่ไม่ได้ป้องกันพรอมต์รหัสผ่าน สคริปต์ของ OP จะยังคงค้างอยู่
Joshua Swink

11

หากคุณกำลังใช้งาน dropbear เพียงแค่เพิ่ม-sตัวเลือก "" เพื่อปิดใช้งานการตรวจสอบรหัสผ่าน


4
+1 สำหรับการไม่สมมติว่าไคลเอ็นต์คือ openssh :-)
cas

8

ในบรรทัดคำสั่ง (หรือ~/.ssh/config) PreferredAuthenticationsคุณสามารถตั้งค่า

PreferredAuthentications=publickey

ฉันคิดว่าในบรรทัดคำสั่งคุณจำเป็นต้องตัดตัวเลือกในเครื่องหมายคำพูดแล้วส่งไปที่ตัวเลือก -o
Craig Walker

3
@CraigWalker นอกจากนี้คุณยังสามารถผ่านมันได้เช่นssh -o PreferredAuthentications=publickey
Tobias Kienzler

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