sshfsを使用してリモートディレクトリをローカルにマウントすることは知っていますが、ローカルディレクトリをリモートfsにマウントする必要があります。
次のようなローカルフォルダーをマウントしたいと思います。
/home/username/project_directory
次のようなsshにアクセスできるリモートマシンに移動します。
/var/www/project_directory
ローカルで行われた編集がリモートファイルシステムに反映されることが目標です。
sshfsを使用してリモートディレクトリをローカルにマウントすることは知っていますが、ローカルディレクトリをリモートfsにマウントする必要があります。
次のようなローカルフォルダーをマウントしたいと思います。
/home/username/project_directory
次のようなsshにアクセスできるリモートマシンに移動します。
/var/www/project_directory
ローカルで行われた編集がリモートファイルシステムに反映されることが目標です。
回答:
from:http : //mysteriousswede.blogspot.com/2012/01/mount-local-directory-to-server-on.html
どうやってするの?ローカルマシンのポート22にログインするマシンのポート10000を使用してssh転送を設定し、sshfsを使用して反対側にマウントします。
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などの他のプロトコルがありますが、同様の問題が発生します。
抱える問題の核心は、マシンがデータのソースを信頼する必要があることと、インターネットセキュリティの核心の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"
原則として、クインの答えと同じですが、各マシン/用途に適応する必要がある個別のコマンドではなく、作業スクリプトとして使用します。
これのオーバーヘッドについては知りませんが、すべてを2回暗号化/復号化するように思えます。
#!/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を無効にします。これは公開鍵認証で完全に安全です。とにかくパスワードを使用するべきではありませんが、自分が管理していることがわかっているホストに接続しているパスワードであってもです。