หากคุณถูกบังคับให้ใช้สคริปต์ 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" ของคุณเพื่อถอดรหัสและดึงรหัสผ่านบัญชีระยะไกล