วิธีเรียกใช้ Local Script บนเซิร์ฟเวอร์ Linux ระยะไกล
เผยแพร่แล้ว: 2022-09-10การเขียนสคริปต์ซ้ำๆ จะช่วยเพิ่มประสิทธิภาพในการบริหารระบบ นั่นยอดเยี่ยมสำหรับเครื่องท้องถิ่น แต่ถ้าคุณดูแลเซิร์ฟเวอร์ระยะไกลล่ะ คุณสามารถเรียกใช้สคริปต์ ท้องถิ่น บนคอมพิวเตอร์ ระยะไกล ได้หรือไม่? ใช่!
การเชื่อมต่อระยะไกล
การดูแลระบบระยะไกลมักจะเกี่ยวข้องกับการเชื่อมต่อกับคอมพิวเตอร์ระยะ ไกล ผ่าน การ เชื่อมต่อที่ปลอดภัย การเชื่อมต่อ SSH จะทำให้คุณมีพรอมต์คำสั่งบนคอมพิวเตอร์ระยะไกล จากนั้นคุณสามารถดำเนินการบำรุงรักษาระบบได้ตามต้องการ
สคริปต์เชลล์ช่วยคุณได้โดยการรวมลำดับของคำสั่งเป็นสคริปต์ที่สามารถเรียกใช้ได้เหมือนกับว่าเป็นโปรแกรม โดยรวมการดำเนินการต่างๆ ไว้ในคำสั่งบรรทัดคำสั่งเดียว
เมื่อเวลาผ่านไป คุณจะปรับแต่งและปรับปรุงสคริปต์ของคุณ หากคุณมีเครื่องระยะไกลจำนวนมากที่ต้องดูแล การรักษาสำเนาของแต่ละสคริปต์บนเซิร์ฟเวอร์แต่ละเครื่องให้เป็นปัจจุบันและเป็นปัจจุบันเป็นเรื่องที่ยุ่งยากและมีค่าใช้จ่ายสูง มันกลายเป็นงานธุรการในตัวเองและกินเวลาที่ใช้สคริปต์ควรจะส่งมอบ
ทางออกที่ดีที่สุดคือให้คุณเก็บสคริปต์ของคุณไว้ในเครื่องของคุณและเรียกใช้บนคอมพิวเตอร์ระยะไกลผ่านการเชื่อมต่อ SSH ซึ่งจะทำให้การจัดการง่ายขึ้นด้วยการรวบรวมสคริปต์แบบรวมศูนย์ และสคริปต์ที่อัปเดตเดียวกันจะทำงานบนคอมพิวเตอร์ทุกเครื่อง
Bash และ SSH มีวิธีทำเช่นนั้น
การเชื่อมต่อ SSH แบบไม่มีรหัสผ่าน
วิธีที่ดีที่สุดในการทำเช่นนี้คือการเชื่อมต่อแบบไม่มีรหัสผ่าน โดยใช้คีย์ SSH ด้วยการสร้างคีย์ SSH บนเครื่องคอมพิวเตอร์ของคุณและส่งไปยังคอมพิวเตอร์ระยะไกลแต่ละเครื่อง คุณสามารถเชื่อมต่อกับคอมพิวเตอร์ระยะไกลได้อย่างปลอดภัยและสะดวก โดยไม่ต้องขอรหัสผ่านในแต่ละครั้ง
แม้ว่าพวกเขาจะสามารถข่มขู่สำหรับผู้ใช้ครั้งแรก แต่คีย์ SSH นั้นไม่ยากจริงๆ สร้างได้ง่าย ติดตั้งง่ายบนเซิร์ฟเวอร์ระยะไกล และไม่ติดขัดเมื่อคุณใช้กับ SSH ข้อกำหนดเบื้องต้นเพียงอย่างเดียวคือคอมพิวเตอร์ระยะไกลมี SSH daemon sshd
ทำงานอยู่ และคุณมีบัญชีผู้ใช้บนคอมพิวเตอร์ระยะไกล
หากคุณได้ดำเนินการดูแลระบบระยะไกลอยู่แล้ว ข้อกำหนดทั้งสองนี้ต้องได้รับการตอบสนองแล้ว
ในการสร้างคู่คีย์ SSH ให้พิมพ์:
ssh-keygen
หากคุณมีบัญชีชื่อ “dave” บนคอมพิวเตอร์ชื่อ “fedora-36.local” คุณสามารถส่งและติดตั้งคีย์สาธารณะ SSH ของคุณไปยังบัญชีนั้นด้วยคำสั่งนี้:
ssh-copy-id [email protected]
ตอนนี้ การเชื่อมต่อ SSH ตามปกติจะตรวจสอบสิทธิ์โดยใช้คีย์ SSH คุณเข้าสู่พรอมต์คำสั่งบนเซิร์ฟเวอร์ระยะไกลโดยไม่ได้รับพร้อมท์ให้ใส่รหัสผ่าน
ssh [email protected]
เรียกใช้ Local Script จากระยะไกล
สำหรับการทดสอบเหล่านี้ เซิร์ฟเวอร์ระยะไกลของเราคือคอมพิวเตอร์ Linux ชื่อ “fedora-36.local” เราได้ตั้งค่าคีย์ SSH และได้ทดสอบการเชื่อมต่อแบบไม่มีรหัสผ่านกับเซิร์ฟเวอร์ระยะไกลจากคอมพิวเตอร์ในพื้นที่ของเรา
สคริปต์ของเราง่ายมาก มันเขียนการประทับเวลาลงในไฟล์ชื่อ “timestamp.txt” บนเซิร์ฟเวอร์ระยะไกล โปรดทราบว่าสคริปต์ลงท้ายด้วยคำสั่ง exit นี่เป็นสิ่งสำคัญ ในระบบที่เก่ากว่าบางระบบ สคริปต์สามารถทำงานจนเสร็จได้ แต่การเชื่อมต่อ SSH ยังคงเปิดอยู่
#!/bin/bash วันที่ >> timestamp.txt ทางออก 0
คัดลอกข้อความนี้ลงในโปรแกรมแก้ไข บันทึกเป็น "local.sh" จากนั้นใช้ chmod
เพื่อให้ทำงานได้
chmod +x local.sh
ในเครื่องของเรา เราจะเปิดสคริปต์ดังนี้:
ssh [email protected] 'bash -s' < local.sh
นี่คือวิธีการทำงาน
- ssh [email protected] : การเชื่อมต่อ SSH ที่เราทำกับเครื่องระยะไกล สิ่งนี้ใช้คำสั่ง
ssh
บัญชีผู้ใช้ที่มีอยู่ล่วงหน้าบนเซิร์ฟเวอร์ระยะไกล และที่อยู่ของเซิร์ฟเวอร์ระยะไกล - 'bash -s' : ทำให้ Bash อ่านคำสั่งจากสตรีมอินพุตมาตรฐาน อนุญาตให้ Bash อ่านอินพุตที่เปลี่ยนเส้นทางหรือไปป์
- < local.sh : เรากำลังเปลี่ยนเส้นทางสคริปต์ไปที่ Bash
เมื่อสคริปต์ทำงาน เราจะกลับไปที่พรอมต์คำสั่งของเครื่องท้องถิ่น ข้ามไปที่เครื่องระยะไกลของเรา เราสามารถใช้ cat เพื่อดูภายในไฟล์ "timestamp.txt"
cat timestamp.txt
เราสามารถเห็นการประทับเวลาของการเชื่อมต่อล่าสุด—และปัจจุบันเท่านั้น— การรันสคริปต์โลคัลหลายครั้งจะเพิ่มการประทับเวลาที่สอดคล้องกันไปยังไฟล์รีโมต
cat timestamp.txt
แน่นอน ในสถานการณ์จริง สคริปต์ของคุณจะทำสิ่งที่มีประโยชน์มากกว่า แต่แม้กระทั่งตัวอย่างเล็กๆ น้อยๆ ของเราก็ยังแสดงให้เห็นว่าสคริปต์ท้องถิ่นกำลังถูกเรียกใช้งานบนเซิร์ฟเวอร์ระยะไกล
ส่งข้อโต้แย้งไปยังสคริปต์
คุณสามารถส่งอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์ได้ เราจะแก้ไขสคริปต์ของเราเพื่อให้มีพารามิเตอร์บรรทัดคำสั่งสามตัว สิ่งเหล่านี้จะถูกเปลี่ยนเส้นทางไปยังไฟล์ “timestamp.txt” พร้อมกับการประทับเวลา
บันทึกสคริปต์นี้เป็น “local2.sh” และทำให้สามารถเรียกใช้งานได้ chmod
#!/bin/bash echo "$1 $2 $3" >> timestamp.txt วันที่ >> timestamp.txt ทางออก 0
คำสั่งที่เราต้องใช้นั้นคล้ายกับตัวอย่างก่อนหน้านี้ โดยมีการเปลี่ยนแปลงเล็กน้อย
ssh [email protected] "bash -s" -- < local2.sh "How-To\ Geek" "Linux" "บทความ"
ยัติภังค์คู่ “ --
” บอก Bash ว่าสิ่งต่อไปนี้ไม่ควรถือเป็นพารามิเตอร์บรรทัดคำสั่งสำหรับคำสั่ง ssh
พารามิเตอร์สามตัวสำหรับสคริปต์เป็นไปตามชื่อสคริปต์ตามปกติ โปรดทราบว่าเราใช้แบ็กสแลช “ \
” เพื่อยกเว้นช่องว่างในพารามิเตอร์ “How-To\ Geek”
เราสามารถตรวจสอบกับ cat
ได้ว่าพารามิเตอร์ของเราได้รับและจัดการอย่างถูกต้องบนเซิร์ฟเวอร์ระยะไกล
cat timestamp.txt
เรียกใช้ส่วนของสคริปต์จากระยะไกล
หากคุณมีสคริปต์ที่ต้องทำการประมวลผลในเครื่องเพื่อกำหนดการดำเนินการที่อาจจำเป็นบนเซิร์ฟเวอร์ระยะไกล คุณสามารถเพิ่มส่วนลงในสคริปต์นั้นเพื่อดำเนินการระยะไกลให้กับคุณได้
เราสามารถทำได้โดยใช้เอกสารที่นี่ เอกสารในที่นี้ช่วยให้เราเปลี่ยนเส้นทางบรรทัดจากส่วนที่มีป้ายกำกับของสคริปต์เป็นคำสั่งได้ การประมวลผลในพื้นที่สามารถทำได้ด้านบนและด้านล่างของเอกสารที่นี่
นี่คือสคริปต์ "local3.sh" ซึ่งมีเอกสารที่นี่
#!/bin/bash #การประมวลผลในท้องถิ่นสามารถทำได้ที่นี่ # การประมวลผลระยะไกลเสร็จสิ้นที่นี่ ssh -T [email protected] << _remote_commands # คำสั่งที่จะเรียกใช้จากระยะไกลจะถูกเพิ่มที่นี่ cd /home/dave/Documents # ฯลฯ # สุดท้าย อัปเดตไฟล์ประทับเวลา echo "Script3.sh:" $(date) >> /home/dave/timestamp.txt # นี่คือป้ายกำกับที่ทำเครื่องหมายจุดสิ้นสุดของการเปลี่ยนเส้นทาง _remote_commands # สามารถประมวลผลในพื้นที่เพิ่มเติมได้ที่นี่ ทางออก 0
เรากำลังใช้คำสั่ง ssh
ที่มีรายละเอียดการเชื่อมต่อเหมือนเดิม เรากำลังเชื่อมต่อในฐานะผู้ใช้ “dave” บนเซิร์ฟเวอร์ระยะไกลที่เรียกว่า “fedora-36.local” เรายังใช้ตัวเลือก -T
(ปิดใช้งานการจัดสรรเทอร์มินัลหลอก) ซึ่งจะป้องกันไม่ให้เซิร์ฟเวอร์ระยะไกลจัดเตรียมเทอร์มินัลแบบโต้ตอบสำหรับการเชื่อมต่อนี้
การเปลี่ยนเส้นทาง “ <<
” ตามด้วยชื่อของ ป้ายกำกับ ในตัวอย่างนี้ เรากำลังใช้ “_remote_commands” ฉลากนี้ไม่มีอะไรพิเศษ เป็นเพียงฉลากเท่านั้น
คำสั่งทั้งหมดที่ปรากฏในบรรทัด หลัง การเปลี่ยนเส้นทางจะถูกส่งผ่านการเชื่อมต่อ SSH การเปลี่ยนเส้นทางจะหยุดเมื่อพบป้ายกำกับ การดำเนินการของสคริปต์จะดำเนินต่อไปด้วยบรรทัดต่อจากป้ายกำกับ
มาเรียกใช้สคริปต์การประมวลผลแบบผสมในพื้นที่/ระยะไกลของเรา
./local3.sh
ตามที่คาดไว้ เราเห็นรายการใหม่ในไฟล์ “timestamp.txt”
cat timestamp.txt
ขยายการเข้าถึงของคุณ
ความสามารถในการเรียกใช้สคริปต์จากระยะไกล—ที่เขียน จัดเก็บ และบำรุงรักษาในเครื่อง—ให้เครื่องมือการดูแลระบบที่สะดวก การรู้ว่าสคริปต์เวอร์ชันเดียวกันทำงานบนเซิร์ฟเวอร์ระยะไกลทั้งหมดของคุณ ทำให้การจัดการง่ายขึ้นมาก
ที่เกี่ยวข้อง: วิธีจัดการเซิร์ฟเวอร์ Linux ด้วยเว็บอินเตอร์เฟสของห้องนักบิน