วิธีการใช้รหัสผ่านที่เข้ารหัสในสคริปต์ทุบตี

Jun 30, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock.com

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

รหัสผ่านและสคริปต์

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

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

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

เราจะใช้ประโยชน์จากที่รู้จักกันดี ชุดเครื่องมือ OpenSSL เพื่อจัดการการเข้ารหัสและยูทิลิตี้ที่เรียกว่า sshpass เพื่อป้อนรหัสผ่านลงในคำสั่ง ssh

ที่เกี่ยวข้อง: วิธีการสร้างและติดตั้งปุ่ม SSH จากเปลือก Linux

การติดตั้ง OpenSSL และ Sshpass

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

บน Ubuntu ให้พิมพ์คำสั่งนี้:

 Sudo Apt รับ OpenSSL 

ติดตั้ง sshpass ใช้คำสั่งนี้:

 sudo apt ติดตั้ง sshpass 

บน Fedora คุณต้องพิมพ์:

 Sudo DNF ติดตั้ง OpenSSL 

คำสั่งในการติดตั้ง sshpass เป็น:

 Sudo DNF ติดตั้ง Sshpass 

บน Manjaro Linux เราสามารถติดตั้ง OpenSSL ด้วย:

 sudo pacman -sy openssl 

ในที่สุดในการติดตั้ง sshpass ใช้คำสั่งนี้:

 sudo pacman -sy sshpass 

การเข้ารหัสบนบรรทัดคำสั่ง

ก่อนที่เราจะเข้าใช้ openssl คำสั่งกับสคริปต์มาทำความคุ้นเคยกับมันโดยใช้มันบนบรรทัดคำสั่ง สมมติว่ารหัสผ่านสำหรับบัญชีบนคอมพิวเตอร์ระยะไกลคือ สนิม! Herring.pitshaft . เราจะเข้ารหัสรหัสผ่านที่ใช้ openssl .

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

 Echo 'Rusty! Herring.pitshaft' | OpenSSL NACE -AES-256-CBC -MD SHA512 -A-PBKDF2 -UERS 100000 -SALT -PASS PASS: 'Pick.your.Password' 

เรากำลังใช้อยู่ ก้อง ในการส่งรหัสผ่านบัญชีระยะไกลผ่านท่อและเข้าสู่ openssl สั่งการ.

NS openssl พารามิเตอร์คือ:

  • enc -aes-256-cbc : ประเภทการเข้ารหัส เรากำลังใช้ มาตรฐานการเข้ารหัสขั้นสูง 256 บิตรหัสตัวเลขที่มีการผูกบล็อกบล็อก
  • -MD SHA512 : ข้อความย่อยข้อความ (แฮช) เรากำลังใช้อัลกอริทึมการเข้ารหัสลับ SHA512
  • -NS : สิ่งนี้บอก openssl ในการใช้การเข้ารหัสพื้นฐาน -64 หลังจากขั้นตอนการเข้ารหัสและก่อนการถอดรหัสเฟส
  • -PBKDF2 : การใช้ฟังก์ชั่นที่ใช้รหัสผ่านที่ใช้รหัสผ่าน 2 (PBKDF2) ทำให้การโจมตีของ Brute Force ประสบความสำเร็จในการคาดเดารหัสผ่านของคุณ PBKDF2 ต้องการการคำนวณจำนวนมากเพื่อทำการเข้ารหัส ผู้โจมตีจะต้องทำซ้ำการคำนวณเหล่านั้นทั้งหมด
  • -iter 100000 : ตั้งค่าจำนวนการคำนวณที่ PBKDF2 จะใช้
  • -เกลือ : การใช้ค่าเกลือที่ใช้แบบสุ่มทำให้เอาต์พุตที่เข้ารหัสแตกต่างกันทุกครั้งแม้ว่าข้อความธรรมดาจะเหมือนกัน
  • - ผ่านผ่าน: 'pick.your.password' : รหัสผ่านเราจะต้องใช้เพื่อถอดรหัสรหัสผ่านระยะไกลที่เข้ารหัส ทดแทน pick.your.password ด้วยรหัสผ่านที่แข็งแกร่งของการเลือกของคุณ

รุ่นที่เข้ารหัสของเรา สนิม! Herring.pitshaft รหัสผ่านถูกเขียนไปยังหน้าต่างเทอร์มินัล

เพื่อถอดรหัสสิ่งนี้เราต้องผ่านสายอักขระที่เข้ารหัส openssl ด้วยพารามิเตอร์เดียวกันที่เราใช้ในการเข้ารหัส แต่การเพิ่มใน -NS ตัวเลือก (ถอดรหัส)

 echo u2fsdgvkx19iiirnesg + wm / ukjtzjwnyopjzphyrdkyzh5lvzrpigo1s0gozu46 | OpenSSL NACE -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -ERS 100000 -SALT -PASS PASS: 'Pick.your.Password' 

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

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

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

ในการส่งเอาต์พุตจากคำสั่งการเข้ารหัสไปยังไฟล์เราสามารถใช้การเปลี่ยนเส้นทาง ไฟล์เรียกว่า ".secret_vault.txt." เราได้เปลี่ยนรหัสผ่านการเข้ารหัสเป็นสิ่งที่แข็งแกร่งยิ่งขึ้น

 Echo 'Rusty! Herring.pitshaft' | OpenSSL enc -AES-256-CBC -MD SHA512 -A-PBKDF2 -TerierS 100000 -SALT -PASS PASS: 'Secret # Vault! รหัสผ่าน' และ GT; .secret_vault.txt 

ไม่มีอะไรที่มองเห็นได้ แต่รหัสผ่านถูกเข้ารหัสและส่งไปยังไฟล์ ".secret_vault.txt"

เราสามารถทดสอบว่ามันทำงานโดยการถอดรหัสรหัสผ่านในไฟล์ที่ซ่อนอยู่ โปรดทราบว่าเรากำลังใช้ แมว ที่นี่ไม่ใช่ ก้อง .

 แมว .secret_vault.txt | OpenSSL enc -aes-256-CBC -MD SHA512 -A -D -PBKDF2 -ERS 100000 -SALT -PASS PASS: 'Secret # Vault! รหัสผ่าน' 

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

 chmod 600 .secret_vault.txt 
 ls -l .secret_vault.txt 

การใช้ Permissions Mask ของ 600 ลบการเข้าถึงทั้งหมดสำหรับทุกคนนอกเหนือจากเจ้าของไฟล์ ตอนนี้เราสามารถไปที่การเขียนสคริปต์ของเรา

ที่เกี่ยวข้อง: วิธีใช้คำสั่ง chmod บน Linux

ใช้ OpenSSL ในสคริปต์

สคริปต์ของเราค่อนข้างตรงไปตรงมา:

 #! / bin / bash

# ชื่อของบัญชีระยะไกล
REMOTE_USER = GEEK

# รหัสผ่านสำหรับบัญชีระยะไกล
REMOTE_PASSWD = $ (CAT .Secret_Vault.txt | OpenSSL enc -AES-256-CBC -MD SHA512 -A -D -PBKDF2 -UTER 100000 -SALT -PASS PASS: 'Secret # Vault! รหัสผ่าน')

# คอมพิวเตอร์ระยะไกล
Remote_Linux = Fedora-34.Local

# เชื่อมต่อกับคอมพิวเตอร์ระยะไกลและใส่เวลาประทับในไฟล์ที่เรียกว่า script.log
sshpass -p $ remote_passwd ssh -t $ remote_user @ $ remote_linux & lt; & lt; _remote_commands
Echo $ ผู้ใช้ "-" $ (วันที่) & gt; & gt; /home/$REMOTE_USER/Script.log
_remote_commands 
  • เราตั้งค่าตัวแปรที่เรียกว่า REMOTE_USER เพื่อ "geek"
  • จากนั้นเราจึงตั้งค่าตัวแปรที่เรียกว่า remote_passwd สำหรับค่าของรหัสผ่านที่ถอดรหัสดึงจากไฟล์ ".secret_vault.txt" โดยใช้คำสั่งเดียวกับที่เราใช้เมื่อไม่นานมานี้
  • ตำแหน่งของคอมพิวเตอร์ระยะไกลจะถูกเก็บไว้ในตัวแปรที่เรียกว่า Remote_linux .

ด้วยข้อมูลนั้นเราสามารถใช้ ssh คำสั่งเพื่อเชื่อมต่อกับคอมพิวเตอร์ระยะไกล

  • NS sshpass คำสั่งเป็นคำสั่งแรกในบรรทัดการเชื่อมต่อ เราใช้กับ -NS ตัวเลือก (รหัสผ่าน) สิ่งนี้ช่วยให้เราระบุรหัสผ่านที่ควรส่งไปยัง ssh สั่งการ.
  • เราใช้ -NS (ปิดใช้งานตัวเลือกการจัดสรรปลอมเทอร์มินัล) ด้วย ssh เพราะเราไม่จำเป็นต้องมี Pseudo-TTY ที่จัดสรรให้เราบนคอมพิวเตอร์ระยะไกล

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

คำสั่งที่ส่งไปยังคอมพิวเตอร์ระยะไกลเพียงแค่บันทึกชื่อบัญชีผู้ใช้และการประทับเวลาไปยังไฟล์ที่เรียกว่า "script.log"

คัดลอกและวางสคริปต์ลงในโปรแกรมแก้ไขและบันทึกลงในไฟล์ที่เรียกว่า "Go-Remote.sh" อย่าลืมเปลี่ยนรายละเอียดเพื่อสะท้อนที่อยู่ของคอมพิวเตอร์ระยะไกลของคุณเองบัญชีผู้ใช้ระยะไกลและรหัสผ่านบัญชีระยะไกล

ใช้ chmod เพื่อให้สคริปต์เรียกใช้งานได้

 chmod + x go-remote.sh 

สิ่งที่เหลืออยู่คือการทดลองใช้ มายิงสคริปต์ของเรากันเถอะ

 ./ Go-Remote.sh 

เพราะสคริปต์ของเราเป็นเทมเพลตที่เรียบง่ายสำหรับสคริปต์แบบอัตโนมัติไม่มีเอาต์พุตไปยังเทอร์มินัล แต่ถ้าเราตรวจสอบไฟล์ "Script.log" บนคอมพิวเตอร์ Fedora เราจะเห็นว่าการเชื่อมต่อระยะไกลสำเร็จแล้วและไฟล์ "Script.log" ได้รับการอัปเดตด้วยการประทับเวลา

 Script.log Cat 

รหัสผ่านของคุณเป็นแบบส่วนตัว

รหัสผ่านบัญชีระยะไกลของคุณไม่ถูกบันทึกในสคริปต์

และถึงแม้ว่ารหัสผ่านการถอดรหัส เป็น, ในสคริปต์ไม่มีใครสามารถเข้าถึงไฟล์ ".secret_vault.txt" ของคุณเพื่อถอดรหัสและดึงรหัสผ่านบัญชีระยะไกล


Linux - บทความยอดนิยม

มีอะไรใหม่ใน Debian 11“เป้า”

Linux Jul 22, 2025

เดเบียน , กำเนิดของการแจกแจง Linux อื่น ๆ อีกมากมายได้ทำการเปิดตัว 11..


KDE Connect มาถึง iPhone

Linux Oct 26, 2025

kde หากคุณกำลังมองหาวิธีง่ายๆในการทำให้ iPhone ของคุณเล่นได้ดีกั�..


10 ลินุกซ์คำสั่งขั้นพื้นฐานสำหรับมือใหม่

Linux Oct 13, 2025

เพิ่งเริ่มต้นใช้งาน Linux? ทำให้ตัวเองสบายใจกับบรรทัดคำสั่งเป็นสิ่งจ..


วิธีการเปิดปิดเครื่องคอมพิวเตอร์อูบุนตู

Linux Oct 12, 2025

เช่นเดียวกับเครื่องคอมพิวเตอร์ส่วนบุคคลทุกเครื่องคอมพิวเตอร์ที�..


วิธีการดาวน์โหลดและติดตั้ง Steam บนลินุกซ์

Linux Oct 9, 2025

Postmodern Studio / Shutterstock.com ดังนั้นคุณต้องการที่จะลองเล่นเกมบน ลินุ�..


วิธีจัดการกับช่องว่างในชื่อไฟล์บน Linux

Linux Dec 14, 2024

เช่นเดียวกับระบบปฏิบัติการส่วนใหญ่ Linux รองรับชื่อไฟล์ที่มีช่องว่างอ..


7 ข้อผิดพลาดผู้ใช้ Linux ใหม่ทำ (และวิธีหลีกเลี่ยง)

Linux Nov 11, 2024

การเรียนรู้ Linux อาจเป็นประสบการณ์ที่น่าหงุดหงิดที่ทุกสิ่งเล็ก ๆ น้อย ..


วิธีแสดงรายการบริการ Linux ด้วย SystemCTL

Linux Oct 18, 2025

คอมพิวเตอร์ Linux ของคุณอาศัยงานพื้นหลังจำนวนมากที่เรียกว่าบริการหรือ..


หมวดหมู่