Я связал одну из папок моего производственного сервера с моим сервером "ssh account" через sshfs .

Мне часто нужно узнать pwd (или realpath) файла на исходном (производственном) сервере, но pwd возвращает путь к файлу на подключенном ("учетная запись ssh") сервере.

Есть ли способ получить оригинальный путь?

Спасибо

Изменить: подробнее об этом: я использую это, чтобы связать мой ssh-сервер с несколькими различными SFTP-серверами / общим хостингом.

Итак, если я делаю это (на некоторых серверах): sshfs user@domain:/ mount_point , то я подключаюсь к своей учетной записи FTP, которая действует как root для моего пользователя, но более похожа на /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

Надеюсь, теперь это имеет смысл.

Спасибо

2 ответа2

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 . Очевидно, что каталог должен существовать локально, чтобы это работало.

1

Разве вы не знаете путь, который экспортируется / монтируется на вашем локальном компьютере? Разве не все пути в точке монтирования будут относиться к "экспортированному" пути?

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

так что если вы находитесь в [dir]/foo/bar, то pwd на реальном хосте - это /[dir]/foo/bar.

Если вы монтируете свою домашнюю папку (по умолчанию, если нет [dir]), и она находится в "пользовательском" месте, то выяснение вашего домашнего пути может быть сделано следующим образом:

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

... тогда все, что у меня есть в точке монтирования / му / хей, на самом деле находится в / home / pvv / d / rakhmato / му / хей

Если монтируемый вами каталог [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.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .