Pregunta SSHFS: obtener pwd real en el servidor original?


He conectado una de mis carpetas del servidor de producción con mi servidor de "cuenta ssh" a través de sshfs.

A menudo necesito descubrir pwd (o realpath) del archivo en el servidor original (producción), pero el pwd devuelve la ruta al archivo en el servidor conectado ("ssh account").

¿Hay alguna manera de obtener un camino original?

Gracias

Editar: más sobre esto: estoy usando esto para vincular mi servidor ssh a múltiples servidores SFTP / alojamiento compartido.

Entonces, si hago esto (en algunos de los servidores): sshfs user@domain:/ mount_point, entonces estoy conectado a mi cuenta de FTP, que actúa como raíz de mi usuario, pero se parece más a algo como /var/www/clients/c/a/account/pub/ y ese es el camino que necesito -

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

Espero que tenga sentido ahora.

Gracias


0


origen


¿Qué obtienes de readlink -f <archivo>? - Xyon
/ssh-account/path/to/file... el equivocado - Adam Kiss
Si tu sshd en el servidor se ejecuta en un chroot tal que / no es el real / en el servidor y quieres ese real /, no hay forma de obtener el real / en el servidor a través de ssh. Sin embargo, podría definir un alias como se sugiere en mi respuesta y simplemente reemplazar el /var/www/mywebsite en consecuencia (por ejemplo, uso /var/www/clients/c/a/account/pub más o menos). Para no definir múltiples alias, puede analizar el resultado de mount, decide dónde apunta esto realmente usando el nombre de usuario dado a sshfs y luego construir la salida en consecuencia. - Claudius
@Claudius wow, esperaba que hubiera algo así como pwd --see-through-every-mount-and-symlink :RE - Adam Kiss
pwd --blatantly-defy-chroot --ignore-filesystem-restrictions --find-absolutely-the-absolute --accept-no-substitutes --never-surrender ? - Xyon


Respuestas:


Puede obtener la ruta montada a través de sshfs desde la salida de mount (o simplemente recordarlo). Entonces puedes

  • crear un alias que tome una ruta en el cliente, elimine el punto de montaje de los SSHfs y prepeda el nombre original del directorio en el servidor. Por ejemplo, si monta el directorio remoto /var/www/mywebsite localmente a /home/test/website (sshfs server:/var/www/mywebsite /home/test/website), entonces lo siguiente funcionará:

    $ 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
    

    Tenga en cuenta cómo los directorios que no coinciden (/etc) no están destrozados.

  • monte el directorio remove en la misma ubicación localmente, es decir, ejecute sshfs por ejemplo, como: sshfs server:/var/www/mywebsite /var/www/mywebsite. El directorio obviamente tiene que existir localmente para que funcione.


1



¡Gracias! Desafortunadamente, esto no funcionará para mí (me estoy conectando a varios servidores ... lea más sobre mi situación en el OP editado) - Adam Kiss


¿No conoce la ruta que se exporta / monta en su máquina local? ¿No estarían todas las rutas bajo el punto de montaje en relación con la ruta "exportada"?

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

así que si estás en [dir] / foo / bar, entonces la pwd en el host real es / [dir] / foo / bar.

Si está montando su carpeta de inicio (por defecto si no es [dir]), y está en un lugar "personalizado", entonces averiguar su ruta de inicio se puede hacer así:

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

... entonces todo lo que tengo en mountpoint / moo / hei está en / home / pvv / d / rakhmato / moo / hei

Si el [dir] que está montando es un alias de otra carpeta (mount -o bind), entonces puede ubicar la ruta original mirando el archivo / etc / mtab. Algo como:

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

... donde localhost es el nombre de su servidor y '/ media' es el [dir] que monta a través de sshfs.


1



No tengo acceso ssh a [algunos] servidores de producción, y algunos solo son un hosting compartido, en realidad (y estoy usando SFTP para conectarme a ellos). Probablemente solo escribo para apoyar. Gracias de cualquier forma :) - Adam Kiss