SSHFS: รับ pwd จริงบนเซิร์ฟเวอร์ดั้งเดิมหรือไม่


0

ฉันได้เชื่อมต่อหนึ่งโฟลเดอร์เซิร์ฟเวอร์การผลิตของฉันด้วย "บัญชี SSH" sshfsเซิร์ฟเวอร์ของฉันผ่านทาง

ฉันมักจะต้องค้นหาpwd(หรือrealpath) ไฟล์บนเซิร์ฟเวอร์เดิม (การผลิต) แต่ pwd ส่งคืนพา ธ ไปยังไฟล์บนเซิร์ฟเวอร์ที่เชื่อมต่อ ("บัญชี ssh")

มีวิธีที่จะได้รับเส้นทางเดิมหรือไม่?

ขอบคุณ

แก้ไข: เพิ่มเติมเกี่ยวกับเรื่องนี้: ฉันใช้สิ่งนี้เพื่อเชื่อมโยงเซิร์ฟเวอร์ ssh ของฉันไปยังเซิร์ฟเวอร์ SFTP ที่แตกต่างกันหลายแห่ง / โฮสติ้งที่ใช้ร่วมกัน

ดังนั้นหากฉันทำสิ่งนี้ (บนเซิร์ฟเวอร์บางตัว): sshfs user@domain:/ mount_pointจากนั้นฉันเชื่อมต่อกับบัญชี FTP ของฉันซึ่งทำหน้าที่เป็นรูทสำหรับผู้ใช้ของฉัน แต่มีมากกว่าสิ่งที่ชอบ/var/www/clients/c/a/account/pub/และนั่นคือเส้นทางที่ฉันต้องการ -

sshfs user@domain:/ mount_point # mount SFTP acc.
cd mount_point
XXXX file.ext # get back: /var/www/clients/…/pub/file.ext
pwd file.ext # returns /ssh-server/path/mount_point/file.ext

หวังว่ามันจะสมเหตุสมผล

ขอบคุณ


1
คุณได้อะไรจาก readlink -f <file>
Xyon

/ssh-account/path/to/file…สิ่งที่ผิด
อดัมจูบ

2
หากsshdเซิร์ฟเวอร์ของคุณทำงานใน chroot ซึ่ง/ไม่ใช่ของจริง/บนเซิร์ฟเวอร์และคุณต้องการใช้งานจริง/ไม่มีวิธีรับค่าจริง/บนเซิร์ฟเวอร์ผ่าน ssh อย่างไรก็ตามคุณสามารถกำหนดชื่อแทนได้ตามคำแนะนำในคำตอบของฉันและเพียงแค่แทนที่ชื่อแทน/var/www/mywebsite(เช่นใช้/var/www/clients/c/a/account/pubหรืออย่างนั้น) เพื่อไม่ให้กำหนดนามแฝงหลายตัวคุณสามารถแยกวิเคราะห์ผลลัพธ์ของการmountตัดสินใจว่าสิ่งนี้ชี้ไปที่การใช้ชื่อผู้ใช้ที่ได้รับsshfsจากนั้นสร้างผลลัพธ์ตามนั้น
Claudius

@ Caludius ว้าวฉันหวังว่าจะมีบางอย่างเช่นpwd --see-through-every-mount-and-symlink: D
Adam Kiss

1
pwd --blatantly-defy-chroot --ignore-filesystem-restrictions --find-absolutely-the-absolute --accept-no-substitutes --never-surrender?
Xyon

คำตอบ:


1

คุณสามารถรับพา ธ ที่ติดตั้งผ่าน sshfs จากผลลัพธ์ของmount(หรือจำได้ง่าย) จากนั้นคุณสามารถ

  • สร้างนามแฝงที่ใช้พา ธ บนไคลเอ็นต์ลบจุดเมานท์ของ SSHfs และเพิ่มชื่อเดิมของไดเรกทอรีบนเซิร์ฟเวอร์ ตัวอย่างเช่นหากคุณติดตั้งไดเรกทอรีระยะไกล/var/www/mywebsiteในเครื่องไปที่/home/test/website( sshfs server:/var/www/mywebsite /home/test/website) ระบบจะทำงานดังต่อไปนี้:

    $ alias mpwd="pwd | sed 's|^/home/test/website|/var/www/mywebsite|'"
    $ pwd
    /home/test/website
    $ mpwd
    /var/www/mywebsite
    $ cd gallery
    $ mpwd
    /var/www/mywebsite/gallery
    $ cd /etc
    $ mpwd
    /etc
    

    โปรดสังเกตว่าไดเรกทอรีที่ไม่ได้จับคู่ ( /etc) ไม่ได้ถูกจัดเรียง

  • ติดไดเรกทอรีลบในสถานที่เดียวกันในพื้นที่ว่ามีการดำเนินการ sshfs sshfs server:/var/www/mywebsite /var/www/mywebsiteตัวอย่างเช่น: ไดเรกทอรีจะต้องมีอยู่ในเครื่องเพื่อให้สามารถใช้งานได้


ขอบคุณ! น่าเสียดายที่นี่ไม่ได้ผลสำหรับฉัน (ฉันกำลังเชื่อมต่อกับเซิร์ฟเวอร์หลายตัว ... อ่านเพิ่มเติมเกี่ยวกับสถานการณ์ของฉันใน OP ที่แก้ไข)
Adam Kiss

1

คุณไม่ทราบเส้นทางที่ส่งออก / ติดตั้งบนเครื่องของคุณหรือไม่ เส้นทางทั้งหมดภายใต้จุดเมานท์จะไม่สัมพันธ์กับเส้นทาง "ส่งออก" หรือไม่

sshfs [user@]host:[dir] mountpoint [options]

ดังนั้นหากคุณอยู่ใน [dir] / foo / bar ดังนั้น pwd บนโฮสต์จริงคือ / [dir] / foo / bar

หากคุณกำลังติดตั้งโฮมโฟลเดอร์ของคุณ (ค่าเริ่มต้นหากไม่มี [dir]) และอยู่ในตำแหน่ง "กำหนดเอง" ดังนั้นการค้นหาพา ธ โฮมของคุณอาจทำได้ดังนี้:

$ ssh flode echo \$HOME
/home/pvv/d/rakhmato

... ถ้าอย่างนั้นสิ่งที่ฉันมีที่ mountpoint / moo / hei นั้นอยู่ใน / home / pvv / d / rakhmato / moo / hei

หาก [dir] ที่คุณกำลังติดตั้งเป็นชื่อแทนไปยังโฟลเดอร์อื่น (mount -o bind) จากนั้นคุณสามารถค้นหาเส้นทางเดิมโดยดูที่ไฟล์ / etc / mtab สิ่งที่ต้องการ:

$ ssh localhost mount |grep '/media.*bind'
/mnt/media/media on /media type none (rw,bind)
/mnt/media/root-extension/usr/share/doc on /usr/share/doc type none (rw,bind)

... โดยที่ localhost เป็นชื่อเซิร์ฟเวอร์ของคุณและ '/ media' คือ [dir] ที่คุณเมานผ่าน sshfs


ฉันไม่สามารถเข้าถึง [บางส่วน] ของเซิร์ฟเวอร์ที่ใช้งานจริงและบางตัวเป็นโฮสติ้งที่ใช้ร่วมกันจริงๆแล้ว (และฉันใช้ SFTP เพื่อเชื่อมต่อกับพวกเขา) ฉันอาจจะเขียนถึงการสนับสนุน ขอบคุณ :)
Adam Kiss
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.