วิธีเรียกใช้ Local Script บนเซิร์ฟเวอร์ Linux ระยะไกล

เผยแพร่แล้ว: 2022-09-10
แล็ปท็อปบนพื้นหลังสีน้ำเงินแสดงอินเทอร์เฟซบรรทัดคำสั่ง Linux
fatmawati achmad zaenuri/Shutterstock.com

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

การเชื่อมต่อระยะไกล

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

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

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

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

Bash และ SSH มีวิธีทำเช่นนั้น

การเชื่อมต่อ SSH แบบไม่มีรหัสผ่าน

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

วิธีสร้างและติดตั้งคีย์ SSH จาก Linux Shell
ที่เกี่ยวข้อง วิธีการสร้างและติดตั้งคีย์ SSH จาก Linux Shell

แม้ว่าพวกเขาจะสามารถข่มขู่สำหรับผู้ใช้ครั้งแรก แต่คีย์ 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 

การใช้ chmod เพื่อทำให้สคริปต์ปฏิบัติการได้

ในเครื่องของเรา เราจะเปิดสคริปต์ดังนี้:

 ssh [email protected] 'bash -s' < local.sh 

เรียกใช้สคริปต์ท้องถิ่นเพื่อทำงานบนเซิร์ฟเวอร์ระยะไกลผ่าน SSH

นี่คือวิธีการทำงาน

  • 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" "บทความ" 

เรียกใช้สคริปต์ท้องถิ่นพร้อมพารามิเตอร์บรรทัดคำสั่งเพื่อรันบนเซิร์ฟเวอร์ระยะไกลผ่าน SSH

ยัติภังค์คู่ “ -- ” บอก Bash ว่าสิ่งต่อไปนี้ไม่ควรถือเป็นพารามิเตอร์บรรทัดคำสั่งสำหรับคำสั่ง ssh พารามิเตอร์สามตัวสำหรับสคริปต์เป็นไปตามชื่อสคริปต์ตามปกติ โปรดทราบว่าเราใช้แบ็กสแลช “ \ ” เพื่อยกเว้นช่องว่างในพารามิเตอร์ “How-To\ Geek”

เราสามารถตรวจสอบกับ cat ได้ว่าพารามิเตอร์ของเราได้รับและจัดการอย่างถูกต้องบนเซิร์ฟเวอร์ระยะไกล

 cat timestamp.txt 

ตรวจสอบว่าได้รับพารามิเตอร์ของสคริปต์และประมวลผลอย่างถูกต้องบนเซิร์ฟเวอร์ระยะไกล

เรียกใช้ส่วนของสคริปต์จากระยะไกล

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

วิธีใช้ "เอกสารที่นี่" ใน Bash บน Linux
วิธีใช้ "เอกสารที่นี่" ที่ เกี่ยวข้อง ใน Bash บน Linux

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

นี่คือสคริปต์ "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 

การเรียกใช้ script3.sh ด้วยการผสมผสานระหว่างการประมวลผลแบบโลคัลและรีโมต

ตามที่คาดไว้ เราเห็นรายการใหม่ในไฟล์ “timestamp.txt”

 cat timestamp.txt 

ขยายการเข้าถึงของคุณ

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

ที่เกี่ยวข้อง: วิธีจัดการเซิร์ฟเวอร์ Linux ด้วยเว็บอินเตอร์เฟสของห้องนักบิน