SSH ทำให้รหัสผ่านที่พิมพ์ทั้งหมดสามารถมองเห็นได้เมื่อคำสั่งถูกจัดเตรียมไว้เป็นอาร์กิวเมนต์สำหรับคำสั่ง SSH


45

ถ้าฉันใช้สิ่งนี้:

ssh user@server 'mysql -u user -p'

เมื่อถามรหัสผ่าน MySQL และเริ่มพิมพ์รหัสผ่านจะปรากฏบนหน้าจอ ฉันจะป้องกันสิ่งนี้ได้อย่างไร ถ้าฉันเข้าสู่ระบบsshและดำเนินการคำสั่ง MySQL ทุกอย่างทำงานได้ดี


5
คุณไม่คิดว่าชื่อค่อนข้างชัดเจน .. คุณสามารถพูดได้ว่าทำให้ข้อความทั้งหมดรวมถึงรหัสผ่านปรากฏ และวิธีการที่ ssh หมายถึงการรู้ว่าสิ่งที่คุณกำลังพิมพ์คือรหัสผ่านและคำสั่งหรือข้อมูลอื่น ๆ ?
barlop

@barlop ฉันเปิดรับข้อเสนอแนะ
user110971

@barlop ทำงานได้ดีเมื่อคุณรันคำสั่งเมื่อคุณ ssh ไปยังเซิร์ฟเวอร์ ฉันกำลังมองหาวิธีที่จะทำให้พฤติกรรม ssh เหมือนกันเมื่อคำสั่งที่มีให้เป็นข้อโต้แย้ง
user110971

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

@barlop เป็นเพียงข้อความเดียวกับที่คุณคาดหวังเช่นรหัสผ่าน ssh ตามด้วยพรอมต์รหัสผ่าน MySQL
user110971

คำตอบ:


100

หากคุณให้คำสั่งรีโมตเพื่อรัน SSH จะไม่จัดสรร tty ดังนั้นคำสั่งรีโมตจะไม่สามารถปิดใช้งาน echo คุณสามารถบังคับ SSH เพื่อให้ tty โดยใช้-tตัวเลือก:

ssh -t user@server 'mysql -u user -p'

ตัวเลือกที่เทียบเท่า (สำหรับ-oหรือไฟล์ config) RequestTTYเป็น ฉันต้องการความระมัดระวังกับการใช้ในการกำหนดค่าเพราะมันสามารถมีผลกระทบที่ไม่พึงประสงค์สำหรับคำสั่งที่ไม่ใช่แบบโต้ตอบ


15
หรือคุณสามารถแก้ไข ~ / .ssh / config เพื่อกำหนดค่าโฮสต์เฉพาะนั้นเพื่อร้องขอ TTY ดูในRequestTTY man 5 ssh_config
CVN

7
@ MichaelKjörling (และ Toby): อาจเพิ่มคำเตือนเล็กน้อยว่าการเพิ่ม "-t" ควรสงวนไว้สำหรับการใช้งานแบบโต้ตอบเท่านั้นเนื่องจากมีผลข้างเคียง เพื่อมุมมองที่ดีเกี่ยวกับผลข้างเคียงบางอย่าง: unix.stackexchange.com/a/122624/27616 (จาก StephaneChazelas)
Olivier Dulac

ตกลง - ฉันจะแนะนำว่ามันเป็นความอัปยศที่คุณไม่สามารถเพิ่มการตั้งค่า (เช่นนี้) ตามคำสั่งระยะไกล (แทนที่จะเป็นโดย Host)
Toby Speight

28

การจัดเก็บรหัสผ่านในไฟล์ตัวเลือกที่ได้รับการป้องกัน

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

คุณสามารถเพิ่มบรรทัดในส่วน [ลูกค้า] ของไฟล์.my.cnfในโฮมไดเร็กตอรี่ของคุณ:

[client]
password=your_pass

แน่นอนว่าคุณจะต้องป้องกันไม่ให้ทุกคนยกเว้นตัวคุณเองสามารถเข้าถึงไฟล์นั้นได้โดยตั้งค่าโหมดการเข้าถึงไฟล์เป็น 400 หรือ 600 ด้วยเช่น

chmod 600 ~/.my.cnf

จากนั้นคุณสามารถใช้สิ่งที่ชอบ

ssh user@server 'mysql -u user110971 --defaults-file=/home/user110971/mysql-opts'

ที่user110971เป็นชื่อผู้ใช้บัญชีของคุณ


บังคับให้ ssh จัดสรรหลอก tty ( ssh -t)

ปัญหานี้เกิดขึ้นทุกครั้งที่คุณส่งคำสั่งผ่านsshและคุณจำเป็นต้องใส่อินพุตเพราะโดยค่าเริ่มต้นsshจะไม่จัดสรรหลอก - tty

คุณสามารถบังคับให้จัดสรร tty ด้วยตัวเลือก-t(มากกว่าหนึ่งถ้าจำเป็น):

-t

บังคับการจัดสรรแบบหลอก สิ่งนี้สามารถใช้เพื่อรันโปรแกรมบนหน้าจอโดยพลการบนเครื่องระยะไกลซึ่งมีประโยชน์มากเช่นเมื่อใช้งานบริการเมนู ตัวเลือกหลาย-tตัวบังคับให้มีการจัดสรร tty แม้ว่า ssh จะไม่มี tty ในเครื่อง

ดังที่คุณสามารถอ่านได้ในโพสต์ Debian (Jul_11_2008)เกี่ยวกับsudoมันเป็นปัญหาเก่าที่รักที่จะเกิดขึ้นอีก:

ssh user@server "sudo ls"  
password: password  

และรหัสผ่านจะแสดงให้คุณ

ทางออกคือการบังคับให้ ssh จัดสรร pseudo-tty ด้วยแฟล็ก -t:

ssh -t user@server sudo ls

บันทึก:

[*]หากคุณสามารถไว้วางใจให้ใส่รหัสผ่านในไฟล์ที่สามารถเข้าถึงได้โดยคุณเท่านั้นและรูทไคลเอ็นต์ที่ทำงานอยู่
หากเป็นไปได้ที่จะรีบูตเครื่องคอมพิวเตอร์ระยะไกลที่เปลี่ยนระบบปฏิบัติการหรือถอด HDD คอมพิวเตอร์จะไม่ถือว่าปลอดภัยอย่างสมบูรณ์ ... แต่ในกรณีนี้ฐานข้อมูลจะไม่ปลอดภัย


1
อาจเพิ่มคำเตือนเล็กน้อยว่าควรเพิ่ม "-t" ไว้ในการใช้งานแบบโต้ตอบเท่านั้นเนื่องจากมีผลข้างเคียง เพื่อมุมมองที่ดีเกี่ยวกับผลข้างเคียงบางอย่าง: unix.stackexchange.com/a/122624/27616 (จาก StephaneChazelas)
Olivier Dulac

3

ตัวเลือกเมานต์ "hidepid" สำหรับ proc fs ก็มีค่าเช่นกัน มันทำให้บรรทัดคำสั่งของคุณมองไม่เห็นในรายการกระบวนการสำหรับผู้ใช้รายอื่น ตัวอย่าง fstab:

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