SSHFS: получить настоящий pwd на оригинальном сервере?

336
Adam Kiss

Я подключил одну из папок моего производственного сервера к своему серверу «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 

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

Спасибо

0
Что вы получаете от readlink -f ? Xyon 11 лет назад 1
`/ ssh-account / path / to / file`… неправильный Adam Kiss 11 лет назад 0
Если ваш `sshd` на сервере запущен в chroot, так что его` / `не является действительным` / `на сервере, и вы хотите этот фактический` / `, нет никакого способа включить фактическое` / `в сервер через ssh. Однако вы все равно можете определить псевдоним, как предложено в моем ответе, и просто заменить `/ var / www / mywebsite` соответствующим образом (например, используйте` / var / www / clients / c / a / account / pub` или так далее). ). Чтобы не определять несколько псевдонимов, вы могли бы проанализировать выходные данные `mount`, решить, где это на самом деле указывает на использование имени пользователя, заданного для 'sshfs`, и затем построить соответствующий вывод. Claudius 11 лет назад 2
@Claudius Ого, я надеялся, что есть что-то вроде `pwd --see-through-every-mount-and-symlink`: D Adam Kiss 11 лет назад 0
`pwd --blatantly-defy-chroot --ignore-filesystem -ограничения --find-абсолютно-абсолютный -accept-no-replaceses --never-surrender`? Xyon 11 лет назад 1
да ... поговорим о поиске единорога Adam Kiss 11 лет назад 0

2 ответа на вопрос

1
Claudius

Вы можете получить путь, смонтированный через 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 11 лет назад 0
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.

У меня нет доступа по ssh к [некоторым] рабочим серверам, а некоторые на самом деле являются общим хостингом (и я использую SFTP для подключения к ним). Я, наверное, просто напишу в поддержку. Однако, спасибо :) Adam Kiss 11 лет назад 0

Похожие вопросы