ฉันสามารถเปลี่ยนรหัสผ่านผู้ใช้ใน Linux จากบรรทัดคำสั่งโดยไม่มีการโต้ตอบหรือไม่?


15

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

ฉันแค่ต้องการหลีกเลี่ยงการเพิ่มสิ่งที่คาดหวังในระบบนี้สำหรับงานนี้


3
สำหรับผู้ที่ต้องการทำเช่นนี้กับ FreeBSD:echo "newpassword" | pw usermod theusername -h 0
Paul Hoffman

คำตอบ:



5

คุณสามารถใช้usermodกับ-pตัวเลือกเพื่อให้แฮชรหัสผ่าน (ไม่ใช่รหัสผ่านจริง) คุณสามารถสร้างแฮรหัสผ่านโดยใช้สิ่งที่ชอบmkpasswd -m sha-256หรือmkpasswd -m md5


1
... แต่ระบบ AIX ของฉันไม่มีusermod: '(- ฉันจะแก้ไขแท็กในคำถาม
voretaq7

3

แน่ใจ

  1. แฮรหัสผ่านในระบบท้องถิ่นของคุณ
  2. เชื่อมต่อกับเครื่องระยะไกล (ที่คุณต้องการเปลี่ยนรหัสผ่าน)
  3. ฟีดรหัสผ่านที่ถูกแฮชและชื่อผู้ใช้ไปยังความคิดสร้างสรรค์sedสคริปต์ที่ปรับปรุงไฟล์รหัสผ่านของระบบ ( /etc/shadow, /etc/master.passwdสิ่งที่มันจะเกิดขึ้น)

1

passwdยูทิลิตี้มีตัวเลือก --stdin ว่าฯ :

ตัวเลือกนี้ใช้เพื่อระบุว่า passwd ควรอ่านรหัสผ่านใหม่จากอินพุตมาตรฐานซึ่งอาจเป็นไพพ์

ไวยากรณ์:

echo "newpass" | passwd --stdin user1

แม้ว่าคุณจะพูดถึงว่าคุณไม่สนใจคุณสามารถใส่รหัสผ่านลงในไฟล์ข้อความแล้วทำcat pass.txtแทนคำสั่ง echo ด้วยวิธีที่ไม่แสดงในประวัติทุบตี


นั่นคือหนึ่ง echo VerySecret | passwd --stdin username
MadHatter

5
Ubuntu ระบบของฉันไม่ได้เป็นตัวเลือกสำหรับ--stdin passwd
Jeff Ferland

คุณพูดถูก ฉันตรวจสอบทั้งระบบ CentOS และบน Mac และพวกเขามีตัวเลือก - stdin ดังนั้นการลบมันจะต้องเป็นสิ่งที่อูบุนตู
Safado

1
@RyanM FreeBSD (และ AFAIK NetBSD และ OpenBSD, AIX, HP-UX และ Solaris ครั้งสุดท้ายที่ฉันตรวจสอบ) ไม่สนับสนุน--stdinอย่างใดอย่างหนึ่ง - ส่วนใหญ่เป็นเพราะมันเป็นหลุมความปลอดภัยขนาดใหญ่ยักษ์ที่รอให้เกิดขึ้น :-)
voretaq7

1
@quanta: หรือเริ่มecho "newpass" | passwd --stdin user1บรรทัดด้วยช่องว่าง; ด้วยวิธีนี้มันจะไม่ไปทุบตีประวัติเลย
Janne Pikkarainen

1

หาก--stdinตัวเลือกไม่ทำงานเราสามารถใช้สองตัวเลือกโดยทั่วไป:

  1. ทั้งใช้อีก utilty ที่เรียกว่าchpaswdในสคริปต์ของคุณ
  2. หรือใช้ echo "current_password\nnew_password\nnew_password" | passwd user_name
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.