โฮมเพจ » ทำอย่างไร » เชลล์สคริปต์เพื่ออัปโหลดไฟล์ไปยังไดเรกทอรีย่อยเดียวกันบนเซิร์ฟเวอร์ระยะไกล

    เชลล์สคริปต์เพื่ออัปโหลดไฟล์ไปยังไดเรกทอรีย่อยเดียวกันบนเซิร์ฟเวอร์ระยะไกล

    งานที่พบบ่อยมากสำหรับนักพัฒนาเว็บกำลังอัปโหลดไฟล์เดียวจากไดเรกทอรีย่อยในกล่องพัฒนาของคุณไปยังไดเรกทอรีย่อยเดียวกันบนเซิร์ฟเวอร์ระยะไกล แต่น่าเสียดายที่นี่เป็นกระบวนการที่ทำด้วยตนเองที่น่ารำคาญซึ่งเกี่ยวข้องกับการสลับไดเรกทอรีบนเซิร์ฟเวอร์ทั้งสองและเสียเวลาเป็นจำนวนมาก.

    ดังนั้นฉันจึงต้องเขียนสคริปต์เชลล์เพื่อทำสิ่งนี้ให้ฉันโดยอัตโนมัติโดยใช้ scp สำหรับการคัดลอกไฟล์อย่างปลอดภัย (หมายเหตุด้านที่สำคัญ: ftp ไม่ปลอดภัยอย่างน่ากลัวใช้ WinSCP แทน)

    ปัญหาหลักในการแก้ไขคือ WordPress ของฉันติดตั้งบนเครื่องพัฒนาของฉันมีไดเรกทอรีพื้นฐานที่แตกต่างจากการติดตั้งบนเซิร์ฟเวอร์ของฉัน บนเครื่องพัฒนาของฉันมัน / var / www และบนเซิร์ฟเวอร์ของฉันก็เป็นอะไรเพิ่มเติมเช่น / var / www / howtogeek / docs / ฉันตัดสินใจที่จะย้ายสิ่งเหล่านั้นไปยังตัวแปรที่จุดเริ่มต้นของสคริปต์เช่นนี้

    [email protected]
    RDIR = / var / www / howtogeek / เอกสาร
    LDIR = "\ / var \ / www"

    โปรดสังเกตว่าโลคัลไดเร็กทอรี (LDIR) ในสคริปต์มี \ ก่อนหน้า / ในพา ธ นี่เป็นเพราะเราจะส่งผ่านสิ่งนี้ไปยังคำสั่ง sed ในสคริปต์ดังนั้นเราจึงต้องหลีกเลี่ยงค่าเหล่านั้น ฉันแน่ใจว่ามีวิธีอื่น ๆ รอบนี้ แต่ฉันไม่รู้.

    ต่อไปฉันจะตั้งค่าการล็อกอินอัตโนมัติ หากต้องการทำสิ่งนี้คุณต้องเรียกใช้ยูทิลิตี ssh keygen ก่อนดังนี้:

    ssh-keygen -t rsa

    จากนั้นคุณต้องคัดลอกไฟล์ ~ / .ssh / id_rsa.pub ไปยังไฟล์ ~ / .ssh / authorized_keys บนเซิร์ฟเวอร์ระยะไกล หากไดเร็กทอรี ~ / .ssh ถูกสร้างขึ้นแล้วบนเซิร์ฟเวอร์ระยะไกล (อาจต้องการตรวจสอบ) จากนั้นคุณสามารถเรียกใช้คำสั่งนี้เพื่อคัดลอกคีย์ทับ:

    cat ~ / .ssh / id_rsa.pub | ssh user @ hostname 'cat >> .ssh / authorized_keys'

    ตอนนี้เรามีการล็อกอินอัตโนมัติ ssh ซึ่งจะเปิดใช้งานการใช้ยูทิลิตี้ scp โดยไม่ต้องใช้รหัสผ่าน ตอนนี้ลองมาดูคำสั่ง scp ที่เราจะใช้ในสคริปต์:

    SCP $ 1 $ SSHSERVER: $ RDIR'pwd | sed“ s / $ LDIR //” '/' echo $ 1 | sed 's /.*\/// "

    $ 1 คือพารามิเตอร์ที่คุณจะส่งต่อไปยังสคริปต์สำหรับชื่อไฟล์ที่คุณพยายามอัปโหลด $ SSHSERVER และ $ RDIR เป็นตัวแปรที่เราจะตั้งไว้ที่จุดเริ่มต้นของสคริปต์เพื่อตั้งชื่อผู้ใช้ @ hostname และเส้นทางระยะไกลก่อนหน้า.

    บล็อกแรกที่เริ่มต้นด้วย pwd | sed ใช้พา ธ ไดเร็กทอรีปัจจุบันและตัดส่วนที่อยู่ก่อนหน้าของพา ธ ที่ไม่ตรงกับรีโมตเซิร์ฟเวอร์ แต่ออกจากพา ธ ที่เหลือ ตัวอย่างเช่นหากคุณอยู่ใน / var / www / wp-content / เมื่อคุณรันคำสั่งบล็อก sed จะดึงออก / var / www ตามตัวแปร LDIR ของเรา แต่ปล่อยให้ / wp-content / ส่วนหนึ่ง.

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

    ตัวอย่างเช่นหากคุณตั้งชื่อสคริปต์ up.sh และรันจากโลคัล / var / www / wp-content / plugins / directory บนไฟล์:

    up.sh myplugin.php

    สิ่งนี้จะถูกขยายโดยเชลล์ดังต่อไปนี้:

    scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php

    แทนที่จะพยายามสร้างไฟล์สคริปต์ของคุณเองตามบทความเราได้จัดเตรียมไฟล์ให้คุณดาวน์โหลด ด้วยวิธีนี้จะไม่มีปัญหาใด ๆ กับตัวละครพิเศษที่ไม่ทำงาน ... และใช่ฉันใช้สคริปต์เพื่ออัปโหลดตัวเอง =)

    ดาวน์โหลด geek-uploader.sh

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

    สคริปต์นี้ควรทำงานกับทุกสิ่งที่มี * เปลือกหอยและยูทิลิตี้ scp ฉันใช้ Ubuntu แต่ควรใช้กับ Solaris, OS X หรือแม้แต่ Windows ที่ติดตั้ง Cygwin.