ดำเนินการคำสั่งในการเชื่อมต่อ SFTP ผ่านสคริปต์


13

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

เป้าหมายของฉันคือการเชื่อมต่อกับ sftp ไปยังเซิร์ฟเวอร์อัปโหลดไฟล์แล้วตัดการเชื่อมต่อ

ฉันมีสคริปต์ต่อไปนี้:

UpdateJar.sh

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins
#Change directory on server
#cd /home/kalenpw/TestWorld/plugins

#Upload file
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar

exit

ปัญหาคือสคริปต์นี้จะสร้างการเชื่อมต่อ SFTP แล้วไม่ทำอะไรเลย เมื่อฉันพิมพ์ exit ในการเชื่อมต่อด้วยตนเองพยายามที่จะดำเนินการคำสั่ง put แต่เนื่องจากเซสชั่น sftp ถูกปิดเพียงแค่พูดว่า put: ไม่พบคำสั่ง

ฉันจะทำให้เรื่องนี้ทำงานได้อย่างถูกต้องได้อย่างไร?

ขอบคุณ


ที่เกี่ยวข้อง: unix.stackexchange.com/questions/22726/…
Elder Geek

คำตอบ:


15

คุณสามารถเปลี่ยนสคริปต์ของคุณเพื่อส่งคำสั่งในเอกสารที่นี่เช่น

#!/bin/bash

sftp -oPort=23 kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins <<EOF
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar   
exit
EOF

<<เครื่องหมายตามด้วยชื่อ ( EOF) บอกสคริปต์ที่จะผ่านบรรทัดต่อไปจนกว่าชื่อที่พบที่จุดเริ่มต้นของบรรทัด (ด้วยตัวเอง)


ยอดเยี่ยมที่ทำสิ่งที่ฉันต้องการ ฉันจะต้องอ่านเอกสารที่นี่ ขอบคุณสำหรับคำตอบด่วนฉันจะยอมรับใน 8 นาที
kalenpw

ไม่มีปัญหา (ฉันลองตรวจสอบซ้ำ แต่พบเพียงคนเดียวที่ปิดว่า "ไม่ชัดเจน")
Thomas Dickey

คุณแน่ใจหรือว่าเซิร์ฟเวอร์จะไม่สำลักกับความคิดเห็นของเชลล์สคริปต์
alk

ด้วยวิธีการนี้ขึ้นอยู่กับชนิดของเปลือก
alk

@alk สคริปต์ทำงานร่วมกับและไม่แสดงความคิดเห็น
kalenpw

5

คุณอาจชอบที่จะใช้แทนscp ทำตัวเหมือนคำสั่งทั่วไปแต่ไฟล์สามารถเป็นรีโมต:sftpscpcp

scp -P 23 /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins

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

โดยปกติsshแล้วscp,, และsftpบริการจะมีให้หากมี; โปรแกรม daemon เดียวกันจัดเตรียมทั้งหมดพร้อมกัน โดยหลักการแล้วผู้ดูแลระบบของเซิร์ฟเวอร์สามารถเลือกที่จะปิดการใช้งานใด ๆ ของพวกเขา แต่ในทางปฏิบัติที่ค่อนข้างหายาก


ไม่ทราบเกี่ยวกับ scp ก่อนหน้าดูมีประโยชน์มาก และคุณพูดถูกscpในเครื่องของฉันแล้ว
kalenpw

4

นอกจากนี้คุณยังสามารถใช้-bตัวเลือกในการที่จะบ่งบอกถึงไฟล์ที่มีคำสั่งสำหรับsftpsftp

ตัวอย่างเช่นคุณสามารถใส่คำสั่งทั้งหมดของคุณในไฟล์sftp_commands.txt:

cd /home/kalenpw/TestWorld/plugins
put /home/kalenpw/.m2/repository/com/Khalidor/TestPlugin/0.0.1-SNAPSHOT/TestPlugin-0.0.1-SNAPSHOT.jar
exit

และเรียกใช้sftpเป็น:

sftp -oPort=23 -b sftp_commands.txt kalenpw@184.155.136.254:/home/kalenpw/TestWorld/plugins 

หรือคุณสามารถส่งคำสั่งผ่าน STDIN ได้เช่นกันหากคุณไม่ต้องการใช้ไฟล์

จากman sftp:

-b batchfile

โหมดแบทช์อ่านชุดคำสั่งจากอินพุต batchfile แทน stdin เนื่องจากไม่มีการโต้ตอบกับผู้ใช้จึงควรใช้ร่วมกับการตรวจสอบสิทธิ์แบบไม่โต้ตอบ batchfile ของ '-' อาจใช้เพื่อระบุอินพุตมาตรฐาน sftp จะยกเลิกหากคำสั่งใด ๆ ต่อไปนี้ล้มเหลว: get, วาง, reget, เปลี่ยนชื่อ, ln, rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, symlink และ lmkdir การยุติข้อผิดพลาดสามารถระงับได้ในคำสั่งตามพื้นฐานของคำสั่งโดยการแก้ไขคำสั่งด้วยอักขระ '-' (ตัวอย่างเช่น -rm / tmp / blah *)


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.