yerel dizini sshfs gibi uzaktan nasıl bağlanır?


23

Sshfs yerel uzak dizini bağlamak için kullanılır biliyorum, ama uzak fs yerel dizini bağlamak gerekir.

Gibi yerel bir klasör bağlamak istiyorum:

/home/username/project_directory

ssh erişimi olan uzak bir makineye, örneğin:

/var/www/project_directory

Yerel olarak yapılan düzenlemelerin uzak dosya sistemine yansıtılması amaçtır.


@quinn bu çözüm çalışıyor mu?
Konga Raju

Evet, şu anda kullanıyorum, iyi çalışıyor gibi görünüyor
quinn

Aslında, bir sorunum var: superuser.com/questions/743316/…
quinn

@quinn, bu blogdaki çözümü burada yanıt olarak göndermelisiniz. Benim için çalışıyor.
brismuth

Yanıtlar:


19

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

Nasıl yapılır? Ssh iletmeyi yerel makinenizdeki 22 numaralı bağlantı noktasına oturum açtığınız makinede 10000 numaralı bağlantı noktasını kullanarak ve diğer tarafa monte etmek için sshfs kullanarak ayarlayabilirsiniz.

F.ex. / home / username / mywwwdevelstuff'ı yerel makinenize sunucu tarafında / var / www olarak bağlamak için:

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
Yerel makinenin ssh sunucusunu çalıştırması gerektiğini belirtmek gerekir.
Jean Carlo Machado

3

Yok hayır.

Bunu yapmak için "tüm" yapmanız gereken mantığınızı tersine çevirmektir. Örneğin, uzak makineye ssh yapacak 1 astar kurabilir ve daha sonra uzak dizini bu kutudaki yerel makineye monte etmek için sshfs kullanabilirsiniz. Tabii ki bu NAT, güvenlik duvarı kuralları vb. İle basit olabilir, ancak kullanım durumunuzu açıklamamışsınızdır.

SMB ve daha da iyisi NFS gibi başka protokoller de var - ancak benzer sorunlara maruz kalacaklar.

Sorunun özü, bir makinenin veri kaynağına güvenmesi gerektiğidir ve eğer uzaktan internet güvenliğinin temel ilkelerinden birini kıracak bir dosya sistemi kurabilirseniz.


1
Ne demeye çalıştığını bilmiyorum. Sorunun amacı için, sunucu / istemcinin anahtarlarla SSH yoluyla oturum açabileceğini, yani birbirlerine güvenebileceğini varsayabileceğinizi düşünüyorum. Soruyu (ve aynı zamanda sahip olduğum problemi) anlamanın yolu, istemciden (dinamik IP, ayrıca dinamik bir IP'ye sahip NAT veya arkasında daha da korkunç durumlar) (kalıcı olarak erişilebilir) sunucuya bir SSH bağlantısı oluşturmaktır. diğer yönden çok daha kolaydır.
Kimse

1

@ Kimsenin senaryosuna dayanarak, yararlı bir yorumla genelleştirdim. Aşağıda benim senaryom.

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

Prensipte bu, quinn'in cevabı ile aynıdır, ancak her makine / kullanım için uyarlanması gereken ayrı komutlar yerine çalışan bir komut dosyasıdır.

Bu yükü bilmiyorum, bana öyle görünüyor ki her şeyi iki kez şifreliyor / şifresini çözüyor.

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

HostAuthenticationForLocalhost'u devre dışı bırakıyorum çünkü belli ki localhost her şey olabilir. Ortak anahtar kimlik doğrulaması ile bu tamamen güvenlidir. Parolaları yine de kullanmamalısınız, ancak parolalarla bile kontrol ettiğinizi bildiğiniz bir ana bilgisayara bağlanıyorsunuz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.