sshfs와 같이 원격에 로컬 디렉토리를 마운트하는 방법은 무엇입니까?


23

sshfs가 원격 디렉토리를 로컬에 마운트하는 데 사용되지만 로컬 디렉토리를 원격 fs에 마운트해야한다는 것을 알고 있습니다.

다음과 같은 로컬 폴더를 마운트하고 싶습니다.

/home/username/project_directory

내가 ssh에 액세스 할 수있는 원격 컴퓨터에 :

/var/www/project_directory

로컬에서 편집 한 내용은 원격 파일 시스템에 반영됩니다.


@ 퀸 작동 솔루션입니까?
Konga Raju

그렇습니다, 나는 그것을 현재 사용하고 있습니다, 잘 작동하는 것 같습니다
quinn

실제로, 나는 하나의 문제가있다 : superuser.com/questions/743316/…
quinn

@quinn 해당 블로그의 솔루션을 여기에 답변으로 게시해야합니다. 그것은 나를 위해 작동합니다.
brismuth

답변:


19

에서 : http://mysteriousswede.blogspot.com/2012/01/mount-local-directory-to-server-on.html

어떻게합니까? 로컬 시스템의 포트 22에 로그인 한 시스템에서 포트 10000을 사용하고 sshfs를 사용하여 다른쪽에 마운트하여 ssh 전달을 설정합니다.

F.ex. 로컬 컴퓨터의 / home / username / mywwwdevelstuff를 서버 쪽의 / var / www에 마운트하려면

localusername@localmachine: ssh username@server -R 10000:localmachine:22
username@server: cd /var
username@server: sshfs -p 10000 -o idmap=user,nonempty \
                 localusername@127.0.0.1:~/mywwwdevelstuff www

3
로컬 머신이 ssh 서버를 실행 중이어야합니다.
Jean Carlo Machado

3

아니.

이 "모두"를 수행하려면 논리를 반대로해야합니다. 예를 들어, 원격 시스템에 ssh하는 1 개의 라이너를 설정 한 다음 sshfs를 사용하여 해당 상자의 로컬 시스템에 원격 디렉토리를 마운트 할 수 있습니다. 물론 이것은 NAT, 방화벽 규칙 등으로 간단 할 수 있지만 사용 사례를 설명하지는 않았습니다.

SMB와 같은 다른 프로토콜이 있으며 NFS보다 더 나은 프로토콜이 있지만 비슷한 문제가 발생합니다.

문제의 핵심은 컴퓨터가 데이터 소스를 신뢰해야하며 인터넷 보안의 핵심 원칙 중 하나를 손상시키는 파일 시스템을 원격으로 마운트 할 수있는 경우입니다.


1
당신이 무슨 말을하는지 모르겠습니다. 질문의 목적을 위해 서버 / 클라이언트가 SSH를 사용하여 서로 로그온 할 수 있다고 가정 할 수 있다고 생각합니다. 내가 질문 (및 또한 가지고있는 문제)을 이해하는 방법은 클라이언트 (동적 IP, NAT 뒤의 동적 IP 또는 더 끔찍한 경우가 있음)에서 (영구적으로 액세스 가능한) 서버로 SSH 연결을 만드는 것입니다 다른 방법보다 훨씬 쉽습니다.
아무도

1

@Nobody의 스크립트를 기반으로 유용한 주석으로 일반화했습니다. 아래는 내 스크립트입니다.

https://gist.github.com/allenyllee/ddf9be045810572cd809ae3587a23658

#!/bin/bash

##/*
## * @Author: AllenYL 
## * @Date: 2017-11-08 11:37:31 
## * @Last Modified by:   allen7575@gmail.com 
## * @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 
## /superuser/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 
## /superuser/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 
## /programming/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 root@10.1.53.168 -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"

0

원칙적으로 quinn의 답변과 동일하지만 각 컴퓨터 / 사용에 맞게 조정 해야하는 별도의 명령 대신 작업 스크립트로 사용됩니다.

나는 이것의 오버 헤드에 대해 모른다. 그것은 모든 것을 두 번 암호화 / 해독하는 것처럼 보인다.

#!/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" &

분명히 localhost는 무엇이든 될 수 있기 때문에 HostAuthenticationForLocalhost를 비활성화합니다. 이것은 공개 키 인증으로 완벽하게 안전합니다. 어쨌든 암호를 사용해서는 안되지만 암호를 사용하더라도 자신이 제어하는 ​​호스트에 연결하고 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.