como montar diretório local para remoto como sshfs?

16

Eu sei que o sshfs é usado para montar o diretório remoto para o local, mas eu preciso montar o diretório local para o fs remoto.

Gostaria de montar uma pasta local como:

/home/username/project_directory

em uma máquina remota à qual tenho acesso ssh, como:

/var/www/project_directory

O objetivo é que as edições feitas localmente sejam refletidas no sistema de arquivos remoto.

    
por Konga Raju 06.07.2013 / 06:20

4 respostas

15

de: link

Como fazer isso? Você configura o encaminhamento ssh usando a porta 10000 na máquina na qual você faz logon na porta 22 em sua máquina local e usa o sshfs para montar no outro lado.

F.ex. para montar / home / username / mywwwdevelstuff em sua máquina local para / var / www no lado do servidor:

localusername@localmachine: ssh username@server -R 10000:localmachine:22
username@server: cd /var
username@server: sshfs -p 10000 -o idmap=user,nonempty \
                 [email protected]:~/mywwwdevelstuff www
    
por 23.05.2015 / 20:58
3

Não.

Para fazer isso, "all" você precisa reverter sua lógica. Você poderia, por exemplo, configurar um liner 1 que faria o ssh na máquina remota e então usar o sshfs para montar o diretório remoto na máquina local naquela caixa. Claro que isso pode ser simplista com NAT, regras de firewall, etc, mas você não descreveu seu caso de uso.

Existem outros protocolos como o SMB e, melhor ainda, o NFS - mas eles sofrerão problemas semelhantes.

O núcleo do problema que você tem é que uma máquina precisa confiar na origem dos dados, e se você pode montar remotamente um sistema de arquivos que quebraria um dos princípios centrais da segurança da Internet.

    
por 06.07.2013 / 10:50
0

Em princípio, é o mesmo que a resposta de quinn, mas como um script de trabalho em vez de comandos separados que precisam de adaptação para cada máquina / uso.

Eu não sei sobre a sobrecarga neste, parece-me que ele criptografa / descriptografa tudo duas vezes.

#!/bin/bash
# Reverse sshfs. You need ssh servers on both ends, the script logs first
# onto the remote end and then back into the local one
# Usage: sshfsr dir [user@]host:mountpoint  [options]
# [options] are passed on to the remote sshfs

set -e

LOCALPATH=$1
REMOTE=$(echo $2 | grep -o '^[^:]*')
REMOTEPATH=$(echo $2 | grep -o '[^:]*$')
ARGS=${@:3}

LOCALUSER=$(whoami)
PORT=10000

ssh $REMOTE -R $PORT:localhost:22 "sshfs -o NoHostAuthenticationForLocalhost=yes -p $PORT $ARGS $LOCALUSER@localhost:$LOCALPATH $REMOTEPATH" &

Desabilito HostAuthenticationForLocalhost porque obviamente localhost pode ser qualquer coisa. Isso é perfeitamente seguro com autenticação de chave pública. Você não deve usar senhas de qualquer maneira, mas mesmo com senhas você está se conectando a um host que você sabe controlar.

    
por 29.11.2016 / 17:57
0

Baseado no roteiro de @ Nobody, generalizei com algum comentário útil. Abaixo está meu script.

link

#!/bin/bash

##/*
## * @Author: AllenYL 
## * @Date: 2017-11-08 11:37:31 
## * @Last Modified by:   [email protected] 
## * @Last Modified time: 2017-11-08 11:37:31 
## */

#
# mount local directory to remote through reverse sshfs
# 
# usage:
#       ./reverse_sshfs.sh [remote_addr] [remote_ssh_port] [remote_user] [local_dir]
# 
# [local_dir] is a path relative to this script
# 
# This script will automatcally create a directory named "project_$LOCAL_USER" in remote user's home dir,
# and mount [local_dir] to this point. When exit, will umount "project_$LOCAL_USER" and deleted it.
# 

##
## linux - how to mount local directory to remote like sshfs? - Super User 
## https://superuser.com/questions/616182/how-to-mount-local-directory-to-remote-like-sshfs
##

# source directory of this script
SOURCE_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

LOCAL_USER=$(whoami)
REMOTE_USER="$3"

LOCAL_DIR="$SOURCE_DIR/$4"
REMOTE_DIR="./project_$LOCAL_USER"

LOCAL_ADDR="localhost"
REMOTE_ADDR="$1"

LOCAL_PORT="22"
FORWARD_PORT="10000"
REMOTE_PORT="$2"

LOCAL_SSH="-p $FORWARD_PORT $LOCAL_USER@$LOCAL_ADDR"
REMOTE_SSH="-p $REMOTE_PORT $REMOTE_USER@$REMOTE_ADDR"

SSHFS_OPTION="-o NoHostAuthenticationForLocalhost=yes"

###############
## With ssh, how can you run a command on the remote machine without exiting? - Super User 
## https://superuser.com/questions/261617/with-ssh-how-can-you-run-a-command-on-the-remote-machine-without-exiting
##
## Here I use -t to force the allocation of a pseudo-terminal, which is required for an interactive shell. 
## Then I execute two commands on the server: first the thing I wanted to do prior to opening the interactive shell 
## (in my case, changing directory to a specific folder), and then the interactive shell itself. 
## bash sees that it has a pseudo-terminal and responds interactively.
##
###############
## Why does an SSH remote command get fewer environment variables then when run manually? - Stack Overflow 
## https://stackoverflow.com/questions/216202/why-does-an-ssh-remote-command-get-fewer-environment-variables-then-when-run-man
##
## sourcing the profile before running the command
## ssh user@host "source /etc/profile; /path/script.sh"
##
## usage:
##      ssh -t -p 88 [email protected] -R 10000:localhost:22 \
##      "source /etc/profile; sshfs  -p 10000 allenyllee@localhost:/media/allenyllee/Project/Project/server_setup/nvidia_docker/project ./project2;bash"
## options:
##       -v Verbose 
##       -X X11 forwarding
##       -t pseudo-terminal for an interactive shell
##
ssh -X -t $REMOTE_SSH -R $FORWARD_PORT:localhost:$LOCAL_PORT \
"source /etc/profile;mkdir $REMOTE_DIR; \
sshfs $SSHFS_OPTION $LOCAL_SSH:$LOCAL_DIR $REMOTE_DIR; bash; \
umount $REMOTE_DIR; rm -r $REMOTE_DIR"
    
por 08.11.2017 / 05:01