SSHFS: echte pwd auf original server bekommen?

381
Adam Kiss

Ich habe einen meiner Produktionsserverordner mit meinem "ssh account" -Server über verbunden sshfs.

Ich muss oft pwd(oder realpath) die Datei auf dem ursprünglichen (Produktions-) Server herausfinden, aber der pwd gibt den Pfad zur Datei auf dem verbundenen Server ("ssh account") zurück.

Gibt es eine Möglichkeit, den ursprünglichen Pfad zu erhalten?

Vielen Dank

Edit: mehr dazu: Ich verwende dies, um meinen SSH-Server mit mehreren verschiedenen SFTP-Servern / Shared Hosting zu verknüpfen.

Also, wenn ich das (auf einigen der Server) mache:, sshfs user@domain:/ mount_pointdann bin ich mit meinem FTP-Konto verbunden, das als root für meinen Benutzer fungiert, aber eher so etwas ist /var/www/clients/c/a/account/pub/und der Pfad, den ich brauche -

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 

Hoffe es macht jetzt Sinn.

Vielen Dank

0
Was bekommen Sie von readlink -f ? Xyon vor 11 Jahren 1
`/ ssh-account / path / to / file`… der falsche Adam Kiss vor 11 Jahren 0
Wenn Ihr `sshd` auf dem Server in einer chroot ausgeführt wird, so dass das` / `nicht das eigentliche` / `auf dem Server ist und Sie das eigentliche` / `möchten, gibt es keine Möglichkeit, das eigentliche` / `einzuschalten der Server via ssh. Sie können jedoch immer noch einen Alias ​​wie in meiner Antwort vorgeschlagen definieren und einfach `/ var / www / mywebsite` entsprechend ersetzen (verwenden Sie beispielsweise` / var / www / clients / c / a / account / pub ') ). Um nicht mehrere Aliase zu definieren, können Sie die Ausgabe von "mount" parsen, entscheiden, wo dies tatsächlich darauf hinweist, dass Sie den Benutzernamen verwenden, der "sshfs" angegeben ist, und dann die Ausgabe entsprechend erstellen. Claudius vor 11 Jahren 2
@Claudius wow, ich hoffte, dass es so etwas wie 'pwd --see-through-every-mount-and-symlink' gibt: D Adam Kiss vor 11 Jahren 0
`pwd - blatantly-defy-chroot --ignore-filesystem-restriktionen - find-absolut-the-absolute --accept-no-substitutes --never-surrender`? Xyon vor 11 Jahren 1
ja ... reden wir über das Suchen nach Einhorn Adam Kiss vor 11 Jahren 0

2 Antworten auf die Frage

1
Claudius

You can get the path mounted via sshfs from the output of mount (or simply remember it). Then you can either

  • build an alias that takes a path on the client, removes the mountpoint of the SSHfs and prepends the original name of the directory on the server. For example, if you mount the remote directory /var/www/mywebsite locally to /home/test/website (sshfs server:/var/www/mywebsite /home/test/website), then the following will work:

    $ 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 

    Note how non-matching directories (/etc) are not mangled.

  • mount the remove directory at the same location locally, that is, execute sshfs for example like: sshfs server:/var/www/mywebsite /var/www/mywebsite. The directory obviously has to exist locally for that to work.

Vielen Dank! Das funktioniert leider nicht für mich (ich verbinde mich mit mehreren Servern… lest mehr über meine Situation im bearbeiteten OP) Adam Kiss vor 11 Jahren 0
1
Ярослав Рахматуллин

Kennen Sie den Pfad, der auf Ihrem lokalen Computer exportiert / gemountet wird? Wären nicht alle Pfade unter dem Einhängepunkt relativ zum "exportierten" Pfad?

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

Wenn Sie sich also in [dir] / foo / bar befinden, ist das pwd auf dem realen Host / [dir] / foo / bar.

Wenn Sie Ihren Home-Ordner mounten (standardmäßig [no]]) und sich an einem "benutzerdefinierten" Ort befinden, können Sie den Home-Pfad wie folgt ermitteln:

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

... was auch immer ich am Mountpoint / Moo / Hei habe, ist eigentlich in / home / pvv / d / rakhmato / moo / hei

Wenn das zu installierende [dir] ein Alias ​​für einen anderen Ordner ist (mount -o bind), können Sie den ursprünglichen Pfad anhand der Datei / etc / mtab suchen. So etwas wie:

$ 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) 

... wobei localhost der Name Ihres Servers und '/ media' das [dir] ist, das Sie über sshfs einhängen.

Ich habe keinen SSH-Zugriff auf [einige] der Produktionsserver, und manche sind eigentlich nur ein Shared Hosting (und ich verwende SFTP, um eine Verbindung zu ihnen herzustellen). Ich werde wahrscheinlich nur an den Support schreiben. Trotzdem danke :) Adam Kiss vor 11 Jahren 0