как подключить локальный каталог к удаленному, как sshfs?

Я знаю, что sshfs используется для подключения удаленного каталога к локальному, но мне нужно подключить локальный каталог к удаленному fs.

Я хотел бы смонтировать локальную папку, например:

/home/username/project_directory

на удаленную машину, к которой у меня есть доступ ssh, например:

/var/www/project_directory

цель состоит в том, что изменения, сделанные локально, отражаются на удаленной файловой системе.

24
задан quinn
13.04.2023 8:47 Количество просмотров материала 2873
Распечатать страницу

4 ответа

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

Как это сделать? Вы установить переадресацию по SSH через порт 10000 на машину вам зайти на 22 порт на локальном компьютере и использовать 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
15
отвечен quinn 2023-04-14 16:35

нет.

для того, чтобы сделать это "все", что вам нужно сделать, это изменить свою логику. Вы могли бы, например, настроить 1 лайнер, который будет ssh в удаленной машине, а затем использовать sshfs для подключения удаленного каталога на локальном компьютере на этом поле. Конечно, это может быть упрощенно, что с NAT, правилами брандмауэра и т. д., Но вы не описали свой случай использования.

есть другие протоколы, такие как SMB и, что еще лучше, NFS-но они будут страдать от подобных проблем.

суть проблемы в том, что машина должна доверять источнику данных, и если вы можете удаленно смонтировать файловую систему, это нарушит один из основных принципов интернет-безопасности.

3
отвечен davidgo 2023-04-14 18:52

в принципе это то же самое, что и ответ Куинна, но как рабочий скрипт, а не отдельные команды, которые нуждаются в адаптации для каждой машины/использования.

Я не знаю о накладных расходах в этом, мне кажется, что он шифрует / дешифрует все дважды.

#!/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=
REMOTE=$(echo  | grep -o '^[^:]*')
REMOTEPATH=$(echo  | 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" &

я отключаю HostAuthenticationForLocalhost, потому что, очевидно, localhost может быть чем угодно. Это совершенно безопасно с аутентификацией с открытым ключом. Вы не должны использовать пароли в любом случае, но даже с паролями вы подключаетесь к хосту, которым управляете.

0
отвечен Nobody 2023-04-14 21:09

основываясь на скрипте @Nobody'S, я обобщил его с некоторым полезным комментарием. Ниже приведен мой скрипт.

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 
## /q/how-to-mount-local-directory-to-remote-like-sshfs-7827/"$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

LOCAL_USER=$(whoami)
REMOTE_USER=""

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

LOCAL_ADDR="localhost"
REMOTE_ADDR=""

LOCAL_PORT="22"
FORWARD_PORT="10000"
REMOTE_PORT=""

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 
## /q/with-ssh-how-can-you-run-a-command-on-the-remote-machine-without-exiting-4252/"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
отвечен allenyllee 2023-04-14 23:26

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх