วิธีตั้งค่าอ็อพชันระบบย่อย sftp -s ในไฟล์คอนฟิกูเรชัน


9

คำสั่ง sftp รองรับตัวเลือกระบบย่อย (-s) ซึ่งอนุญาตให้ผู้ใช้รีโมตสามารถเลือกเรียกทำงานรีโมต sftp-server และเลือกที่จะอัพเกรดเป็น sudo ในกระบวนการเช่นนั้น

sftp -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" xxx.yyy.zzz.aaa

คำสั่งนี้เทียบกับตัวเลือกไคลเอ็นต์ ssh ใน ~ / .ssh / config อนุญาตให้ใช้ pubkey และพอร์ตที่กำหนดเองและการตั้งค่าผู้ใช้อย่างโปร่งใส

อย่างไรก็ตามsubsystemดูเหมือนจะเฉพาะ sftp และด้วยเหตุนี้มันไม่ได้ตั้งค่าในไฟล์กำหนดค่าและจะต้องตั้งค่าเป็นตัวเลือกบรรทัดคำสั่งสำหรับ sftp

อย่างไรก็ตามเครื่องมือบางอย่างห่อหุ้มการร้องขอ sftp ดังนั้นจึงเป็นไปไม่ได้ที่จะตั้งค่าตัวเลือกระบบย่อยและติดอยู่กับการเข้าถึงของผู้ใช้

มีไฟล์ตัวเลือกการกำหนดค่าบางอย่างที่ฉันสามารถใช้เพื่อตั้งค่านี้สำหรับ openssh sftp โดยทั่วไป?

มีไฟล์กำหนดค่าบางอย่างที่มีผลต่อวิธีที่ gnome nautilus เรียกใช้ sftp สำหรับการรวมตัวจัดการไฟล์หรือไม่


อัปเดตวิธีแก้ปัญหาแฮ็ก แต่ทำงานได้ที่เป็นไปได้คือ ...

ดังนั้นปรากฎว่าไม่มีไฟล์กำหนดค่าที่ชัดเจนที่ sftp จะใช้สำหรับตัวเลือกดังนั้นฉันจึงสิ้นสุดการแก้ไขสคริปต์ wrapper ทั่วไปเพื่อเพิ่มตัวเลือกอย่างชัดเจนสำหรับโฮสต์ที่ฉันเลือกโดยใส่สิ่งนี้ในเส้นทางของฉัน

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/sftp
args=("$@")
#the final arg should contain a hostname of the form [user@]host[:path]
case "${args[@]: -1}" in
    myserver.com)
    exec $OPERATION -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" "$args"
    ;;
*)
   exec $OPERATION "$args" 
    ;;
esac

อย่างไรก็ตามขึ้นอยู่กับไฟล์ sudoers ของคุณโดยทั่วไปแล้วการเรียกใช้ sudo ต้องใช้ tty ดังนั้นคุณต้องผ่านตัวเลือก "-t" ไปยัง ssh แล้วเดาว่าอะไร ไม่มีตัวเลือกการกำหนดค่าสำหรับคำสั่งไคลเอ็นต์ ssh ที่มีการบันทึกไว้ซึ่งทำงานในไฟล์ ssh_config หรือ ~ / .ssh / config ฮ่าฮ่า

ดังนั้นฉันจึงเขียนสคริปต์ตัวตัดคำอื่นเพื่อให้สิ่งนั้น ....

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/ssh
args=("$@")
#locating the hostname is not so simple with ssh
exec $OPERATION -tt "$args"

แม้ว่าตอนนี้ฉันมีปัญหาในการรับ sftp เพื่อใช้ไฟล์ wrapper ~ / bin / ssh ของฉันเนื่องจากดูเหมือนว่าฮาร์ดโค้ดลงใน sftp และควบคุมโดยตัวเลือก "-S"


เป้าหมายของคุณคืออะไร ฉันไม่เข้าใจถึงประโยชน์ใด ๆ ของคำสั่งของคุณ
jirib

3
ฉันรัน ssh โดยไม่มีการล็อกอินของผู้ใช้รูทตามโครงสร้างพื้นฐานของเราดังนั้นจึงอนุญาตให้ผู้ใช้ sudo ทำการเปลี่ยนแปลงไฟล์ที่มีสิทธิ์รูทผ่านเครื่องมือที่ทำงานร่วมกับ gnome gvfs
Tom H

คำตอบ:


1

ตามssh_config(5)หน้า man คุณสามารถกำหนดค่าพา ธ ในsshd_configไฟล์การกำหนดค่า:

 Subsystem
         Configures an external subsystem (e.g. file transfer daemon).
         Arguments should be a subsystem name and a command (with optional
         arguments) to execute upon subsystem request.

ดังนั้นดูเหมือนว่าคุณสามารถทำได้ง่าย ๆ :

Subsystem sftp /usr/libexec/openssh/sftp-server -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server"

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


ใช่ฉันกำลังมองหาฝั่งไคลเอ็นต์ แม้ว่าฉันมีความคิดที่ฉันได้ปรับปรุงคำถามด้วย
Tom H

อืมฉันอยากได้ GUI และคำตอบบรรทัดคำสั่งจริงๆ ฉันคิดว่า larsks อยู่ในบรรทัดที่ถูกต้อง แต่ฉันคิดว่าคำสั่งระบบย่อยบนเซิร์ฟเวอร์ระยะไกลต้องเป็นสคริปต์ที่ตัวเองสามารถ "รู้" สิทธิของผู้ใช้ที่พยายามเข้าสู่ระบบหรือสามารถทำได้อย่างสง่างาม (และ เงียบ ๆ ) ล้มเหลวกลับสู่การเข้าสู่ระบบ sftp มาตรฐาน
Julian Knight

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