ฉันกำลังทำงานกับสคริปต์ที่ต้องคัดลอกไฟล์บางไฟล์จากเครื่องโลคัลไปยังไดเร็กทอรีบนเซิร์ฟเวอร์ระยะไกล ปัญหาที่ฉันพบคือไดเร็กทอรี (/etc/init.d) เป็นของ root ดังนั้นฉันจึงได้รับการยกเว้นการอนุญาตหากฉันพยายามคัดลอกไฟล์ลงในไดเร็กทอรี นั่นหมายความว่าฉันไม่สามารถใช้ scp โดยไม่เข้าสู่ระบบในฐานะรูท
ทางออกที่ใกล้เคียงที่สุดที่ฉันพบคือคำตอบนี้: https://askubuntu.com/a/872537/798391 . น่าเสียดายที่คำตอบที่ให้ไว้ใช้งานไม่ได้และไม่มีคำแนะนำใด ๆ ในความคิดเห็นที่ดูเหมือนจะแก้ไขได้ ถ้าฉันวิ่ง
แมว myscript.sh | ssh foo@myserver "sudo tee -a /etc/init.d/myscript.sh"
ฉันได้รับข้อผิดพลาด
sudo: ไม่มี tty และไม่ได้ระบุโปรแกรม askpass
หนึ่งในความคิดเห็นแนะนำให้เพิ่ม -t ในคำสั่ง ssh
แมว myscript.sh | ssh -t foo@myserver "sudo tee -a /etc/init.d/myscript.sh"
แต่นั่นส่งผลให้เกิดข้อผิดพลาด
Pseudo-terminal จะไม่ถูกจัดสรร เนื่องจาก stdin ไม่ใช่เทอร์มินัล
ตัวเลือกอื่นที่แนะนำคือการใช้ -S อาร์กิวเมนต์ของ sudo
แมว myscript.sh | ssh foo@myserver "sudo -S tee -a /etc/init.d/myscript.sh"
อย่างน้อยก็แจ้งรหัสผ่าน แต่หมดเวลาและถามอีกครั้งก่อนที่จะสามารถป้อนรหัสผ่านได้อย่างสมบูรณ์
ณ จุดนี้ ฉันไม่มีความคิดมีวิธีทำให้คำสั่งนี้ทำงานหรือไม่? มีทางเลือกอื่นที่ดีกว่าสำหรับการคัดลอกไฟล์ไปยังตำแหน่งระยะไกลที่มีการป้องกันหรือไม่