เป็นไปได้ไหมที่จะส่งรหัสผ่านไปยังเชลล์สคริปต์?


11

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

คำตอบ:


12

โดย "ป้อนรหัสผ่าน" คุณอาจหมายถึงการป้อนข้อมูลโดยที่ผู้ใช้ไม่สามารถมองเห็นได้

(แนะนำโดย geirha) เมื่อใช้ bash คุณสามารถใช้-sตัวเลือกเพื่อป้องกันไม่ให้แสดงตัวอักษรที่พิมพ์:

read -p "Password please: " -s pass

หรือเปลี่ยนพฤติกรรมของเทอร์มินัลเพื่อซ่อนอักขระที่พิมพ์ด้วยstty -echo(ปิดการใช้งานecho) หลังจากที่ได้อ่านรหัสผ่านที่มีเปลือกในตัวreadลงในตัวแปร (ในด้านล่างตัวอย่างเช่น$pass) stty echoหันกลับไปด้วย เนื่องจากบรรทัดใหม่Enterถูกซ่อนไว้คุณจึงต้องพิมพ์บรรทัดใหม่เพื่อรับผลลัพธ์ในอนาคตในบรรทัดใหม่

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readและprintfเป็นตัวเชลล์ sttyให้บริการโดยcoreutilsแพคเกจซึ่งติดตั้งโดยค่าเริ่มต้น นั่นหมายความว่าข้อมูลโค้ดนี้พกพาได้มาก

หมายเหตุ: -pตัวเลือกที่ไม่ได้มาตรฐาน bashแต่จาก หากคุณต้องการแสดงพรอมต์ในเชลล์อื่นให้ใช้:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

อ้างอิง:


ฉันแค่ต้องการให้รหัสผ่านรูทของระบบรีโมตในสคริปต์ เป็นไปได้ในกรณีของคุณ?
karthick87

@ karthick87: ไม่สคริปต์นี้เพิ่งรวบรวมข้อมูลประเภทผู้ใช้แบบโต้ตอบ หากคุณต้องการใส่รหัสผ่านของรูทในสคริปต์ทำไมคุณไม่ลองเข้าสู่ระบบแบบคีย์เบท
Lekensteyn

1
การอ่านของ Bash ยังมีตัวเลือกในการปิดเสียงก้องขณะอ่านในบรรทัด help '\read'ดู
geirha

ในzshจะผ่านการประสบความสำเร็จread -s 'pw?Prompt text'ที่pwเป็นตัวแปรที่รหัสผ่านจะถูกวางไว้และ-sเป็นธงที่จะซ่อนการป้อนข้อมูล
หัวล้าน

2

คุณต้องการรหัสผ่านโปรแกรมใด

สคริปต์บนลิงก์ใช้งานได้สำหรับฉัน โปรดทราบว่าไม่ใช่สคริปต์ของเชลล์ แต่เป็นสคริปต์ที่ต้องการ (จำเป็นexpectต้องติดตั้งแพคเกจ`) การใช้ความคาดหวังเป็นวิธีการทั่วไปในการทำให้โปรแกรมโต้ตอบแบบข้อความเป็นไปโดยอัตโนมัติ

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

บางโปรแกรมอื่น ๆ (เช่นsudo) มีตัวเลือกในการอ่านรหัสผ่านจาก stdin

การให้รหัสผ่านเป็นตัวเลือกบรรทัดคำสั่งมักจะเป็นปัญหาด้านความปลอดภัยบนระบบส่วนใหญ่ผู้ใช้สามารถเห็นกระบวนการผู้ใช้งานอื่นใด ๆ psรวมทั้งคำสั่งมีอาร์กิวเมนต์บรรทัดโดยใช้เครื่องมือง่ายๆเช่น


ฉันแค่ต้องการส่งรหัสผ่านไปยังโปรแกรม ssh
karthick87

ดังนั้นการรับรองความถูกต้องของคีย์อาจใช้งานได้สำหรับคุณ: ใช้ssh-keygenเพื่อสร้างคีย์การรับรองความถูกต้อง (เพียงกด Enter เมื่อถูกขอให้ใส่รหัสผ่าน) และคัดลอกไปยังผู้ใช้ระยะไกลโดยใช้ssh-copy-idหากการรับรองความถูกต้องของคีย์ ไม่ขอรหัสผ่านจากคุณ
Florian Diesch

1

สคริปต์ไม่ควรจัดการกับรหัสผ่านจริงๆ มีแอปพลิเคชันใดที่ต้องการรหัสผ่านเพื่อขอรหัสผ่านเองหรือหากไม่สามารถทำได้ให้ค้นหาวิธีที่ดีกว่าในการตรวจสอบสิทธิ์กับแอปพลิเคชัน โปรดอ่านhttp://mywiki.wooledge.org/BashFAQ/069


0

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

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

การติดตั้ง:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

สิ่งที่คำสั่งติดตั้งข้างต้นจะทำเพื่อคุณคือ:

  1. /var/tmp/KINGLAZY/SHIELDX-(your-script-name)มันจะติดตั้งสคริปต์ที่เข้ารหัสในไดเรกทอรี

  2. มันจะวางลิงก์ไปยังสคริปต์ที่เข้ารหัสนี้ในไดเรกทอรีใดก็ตามที่คุณระบุแทน/home/(your-username)- ด้วยวิธีนี้ช่วยให้คุณสามารถเข้าถึงสคริปต์ได้อย่างง่ายดายโดยไม่ต้องพิมพ์เส้นทางที่แน่นอน

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

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

บันทึก:

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


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