sshfs가 원격 디렉토리를 로컬에 마운트하는 데 사용되지만 로컬 디렉토리를 원격 fs에 마운트해야한다는 것을 알고 있습니다.
다음과 같은 로컬 폴더를 마운트하고 싶습니다.
/home/username/project_directory
내가 ssh에 액세스 할 수있는 원격 컴퓨터에 :
/var/www/project_directory
로컬에서 편집 한 내용은 원격 파일 시스템에 반영됩니다.
sshfs가 원격 디렉토리를 로컬에 마운트하는 데 사용되지만 로컬 디렉토리를 원격 fs에 마운트해야한다는 것을 알고 있습니다.
다음과 같은 로컬 폴더를 마운트하고 싶습니다.
/home/username/project_directory
내가 ssh에 액세스 할 수있는 원격 컴퓨터에 :
/var/www/project_directory
로컬에서 편집 한 내용은 원격 파일 시스템에 반영됩니다.
답변:
에서 : 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
아니.
이 "모두"를 수행하려면 논리를 반대로해야합니다. 예를 들어, 원격 시스템에 ssh하는 1 개의 라이너를 설정 한 다음 sshfs를 사용하여 해당 상자의 로컬 시스템에 원격 디렉토리를 마운트 할 수 있습니다. 물론 이것은 NAT, 방화벽 규칙 등으로 간단 할 수 있지만 사용 사례를 설명하지는 않았습니다.
SMB와 같은 다른 프로토콜이 있으며 NFS보다 더 나은 프로토콜이 있지만 비슷한 문제가 발생합니다.
문제의 핵심은 컴퓨터가 데이터 소스를 신뢰해야하며 인터넷 보안의 핵심 원칙 중 하나를 손상시키는 파일 시스템을 원격으로 마운트 할 수있는 경우입니다.
@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"
원칙적으로 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를 비활성화합니다. 이것은 공개 키 인증으로 완벽하게 안전합니다. 어쨌든 암호를 사용해서는 안되지만 암호를 사용하더라도 자신이 제어하는 호스트에 연결하고 있습니다.