ค้นหาเว็บไซต์

sshpass: เครื่องมือที่ยอดเยี่ยมสำหรับการเข้าสู่ระบบ SSH แบบไม่โต้ตอบ - ห้ามใช้บนเซิร์ฟเวอร์ที่ใช้งานจริง


ในกรณีส่วนใหญ่ ผู้ดูแลระบบ Linux เข้าสู่ระบบเซิร์ฟเวอร์ Linux ระยะไกลโดยใช้ SSH โดยระบุรหัสผ่าน หรือเข้าสู่ระบบ SSH โดยไม่ต้องใช้รหัสผ่าน หรือการตรวจสอบสิทธิ์ SSH แบบใช้คีย์

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

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

ssh ใช้การเข้าถึง TTY โดยตรงเพื่อให้แน่ใจว่าผู้ใช้แป้นพิมพ์โต้ตอบเป็นผู้ให้รหัสผ่านจริง Sshpass รัน ssh ใน tty โดยเฉพาะ ทำให้เข้าใจผิดโดยเชื่อว่าได้รับรหัสผ่านจากผู้ใช้แบบโต้ตอบ

ข้อสำคัญ: การใช้ sshpass ถือว่ามีความปลอดภัยน้อยที่สุด เนื่องจากจะเปิดเผยรหัสผ่านแก่ผู้ใช้ระบบทุกคนบนบรรทัดคำสั่งด้วย แบบธรรมดา “ps” คำสั่ง ฉันขอแนะนำอย่างยิ่งให้ใช้การตรวจสอบสิทธิ์แบบไม่ใช้รหัสผ่าน SSH

ติดตั้ง sshpass บนระบบ Linux

ในระบบที่ใช้ RedHat/CentOS ก่อนอื่นคุณต้องเปิดใช้งานพื้นที่เก็บข้อมูล Epel บนระบบของคุณเพื่อติดตั้งโดยใช้คำสั่ง yum ดังที่แสดง

yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

บน Debian/Ubuntu และอนุพันธ์ คุณสามารถติดตั้งได้โดยใช้คำสั่ง apt-get ดังที่แสดง

sudo apt-get install sshpass

หรือคุณสามารถติดตั้งจากแหล่งที่มาเพื่อให้มี sshpass เวอร์ชันล่าสุด ขั้นแรกให้ดาวน์โหลดซอร์สโค้ด จากนั้นแยกเนื้อหาของไฟล์ tar และติดตั้งดังนี้:

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

วิธีใช้ sshpass ใน Linux

sshpass ใช้ร่วมกับ ssh คุณสามารถดูตัวเลือกการใช้งาน sshpass ทั้งหมดพร้อมคำอธิบายแบบเต็มได้โดยการออกคำสั่งด้านล่าง:

sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

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

ล็อกอินเข้าสู่เซิร์ฟเวอร์ Linux ssh ระยะไกล (10.42.0.1) ด้วยชื่อผู้ใช้และรหัสผ่าน และตรวจสอบการใช้งานดิสก์ระบบไฟล์ของระบบระยะไกลดังที่แสดง

sshpass -p 'my_pass_here' ssh [email  'df -h' 

ข้อสำคัญ: ที่นี่ มีการให้รหัสผ่านไว้ในบรรทัดคำสั่งซึ่งในทางปฏิบัติไม่ปลอดภัยและไม่แนะนำให้ใช้ตัวเลือกนี้

อย่างไรก็ตาม เพื่อป้องกันการแสดงรหัสผ่านบนหน้าจอ คุณสามารถใช้แฟล็ก -e และป้อนรหัสผ่านเป็นค่าของตัวแปรสภาพแวดล้อม SSHPASS ดังต่อไปนี้:

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

หมายเหตุ: ในตัวอย่างด้านบน ตัวแปรสภาพแวดล้อม SSHPASS มีไว้เพื่อวัตถุประสงค์ชั่วคราวเท่านั้น และจะถูกลบออกในระหว่างการรีบูต

หากต้องการตั้งค่าตัวแปรสภาพแวดล้อม SSHPASS อย่างถาวร ให้เปิดไฟล์ /etc/profile และพิมพ์คำสั่งส่งออกที่จุดเริ่มต้นของไฟล์:

export SSHPASS='my_pass_here'

บันทึกไฟล์และออก จากนั้นรันคำสั่งด้านล่างเพื่อให้มีผลกับการเปลี่ยนแปลง:

source /etc/profile 

ในทางกลับกัน คุณยังสามารถใช้แฟล็ก -f และใส่รหัสผ่านในไฟล์ได้ ด้วยวิธีนี้ คุณสามารถอ่านรหัสผ่านจากไฟล์ได้ดังนี้:

sshpass -f password_filename ssh [email  'df -h'

คุณยังสามารถใช้ sshpass เพื่อถ่ายโอนไฟล์โดยใช้ scp หรือไฟล์สำรอง/ซิงค์ผ่าน rsync โดยใช้ SSH ดังที่แสดง:

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

สำหรับการใช้งานเพิ่มเติม ฉันขอแนะนำให้คุณอ่านหน้าคู่มือ sshpass พิมพ์:

man sshpass

ในบทความนี้ เราได้อธิบาย sshpass เครื่องมือง่ายๆ ที่เปิดใช้งานการตรวจสอบสิทธิ์รหัสผ่านแบบไม่โต้ตอบ แม้ว่าเครื่องมือนี้อาจมีประโยชน์ แต่ขอแนะนำอย่างยิ่งให้ใช้กลไกการตรวจสอบคีย์สาธารณะที่ปลอดภัยยิ่งขึ้นของ ssh

กรุณาทิ้งคำถามหรือแสดงความคิดเห็นผ่านทางส่วนข้อเสนอแนะด้านล่างสำหรับการสนทนาเพิ่มเติม