স্থানীয় ডিরেক্টরিটি কীভাবে দূরবর্তী স্থানে sshfs এ মাউন্ট করবেন?


23

আমি জানি sshfs স্থানীয় থেকে দূরবর্তী ডিরেক্টরি মাউন্ট করতে ব্যবহৃত হয়, তবে আমার স্থানীয় ডিরেক্টরি দূরবর্তী fs এ মাউন্ট করতে হবে।

আমি একটি স্থানীয় ফোল্ডার যেমন মাউন্ট করতে চাই:

/home/username/project_directory

আমার কাছে এমন একটি রিমোট মেশিনে প্রবেশ করা উচিত, যেমন:

/var/www/project_directory

স্থানীয়ভাবে সম্পাদনা করা লক্ষ্যটি দূরবর্তী ফাইল সিস্টেমে প্রতিফলিত হয়।


@ প্রশ্ন এটি সমাধান কাজ করছে?
কঙ্গা রাজু

হ্যাঁ, আমি বর্তমানে এটি ব্যবহার করছি, ভাল কাজ করছে বলে মনে হচ্ছে
কুইন

আসলে, আমার একটি ইস্যু রয়েছে: superuser.com/questions/743316/…
কুইন

@ তবে আপনার উত্তরটি সেই ব্লগে পোস্ট করা উচিত। এটা আমার জন্য কাজ করে.
brismuth

উত্তর:


19

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

এটা কিভাবে করতে হবে? আপনি আপনার স্থানীয় মেশিনে 22 পোর্টে লগইন করেছেন এমন মেশিনে 10000 পোর্ট ব্যবহার করে এসএস ফরোয়ার্ডিং সেটআপ করেছেন এবং অন্যদিকে মাউন্ট করার জন্য এসএসএফএস ব্যবহার করেন।

F.ex. আপনার স্থানীয় মেশিনে মাউন্ট / হোম / ইউজারনেম / মাইওউইভেলভ স্টাফটি সার্ভারের দিকে / 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 সার্ভার চালাচ্ছে।
জিন কার্লো মাচাডো

3

না।

এই "সমস্ত" করার জন্য আপনাকে যা করতে হবে তা হ'ল আপনার যুক্তিটিকে বিপরীত করা। উদাহরণস্বরূপ, আপনি একটি 1 টি লাইনার সেট আপ করতে পারেন যা দূরবর্তী মেশিনে প্রবেশ করবে এবং তারপরে সেই বাক্সের স্থানীয় মেশিনে রিমোট ডিরেক্টরিটি মাউন্ট করতে sshfs ব্যবহার করবে। অবশ্যই এটি NAT, ফায়ারওয়াল বিধি ইত্যাদির সাথে সরলতর হতে পারে তবে আপনি নিজের ব্যবহারের ক্ষেত্রে বর্ণনা দেন নি।

এসএমবি এবং আরও ভাল এনএফএসের মতো আরও প্রোটোকল রয়েছে - তবে তারা একই রকম সমস্যায় ভুগবে।

আপনার যে সমস্যার মুখোমুখি হচ্ছে তার মূলটি হ'ল কোনও মেশিনকে ডেটা উত্সের উপর নির্ভর করতে হবে এবং আপনি যদি এমন একটি ফাইল সিস্টেম দূরবর্তীভাবে মাউন্ট করতে পারেন যা ইন্টারনেট সুরক্ষার মূল মূলগুলির একটি ভেঙে ফেলতে পারে।


2
আপনি কী বলতে চাইছেন তা আমি জানি না। আমি মনে করি যে প্রশ্নের উদ্দেশ্যটির জন্য আপনি নিরাপদে ধরে নিতে পারেন যে সার্ভার / ক্লায়েন্ট এসএসএইচ-এর মাধ্যমে কীগুলির সাহায্যে একে অপরের সাথে লগ ইন করতে পারে, অর্থাৎ একে অপরকে বিশ্বাস করবে। আমি যেভাবে প্রশ্নটি বুঝতে পারি (এবং আমার যে সমস্যাটিও রয়েছে) তা হ'ল ক্লায়েন্টের (এসএমএইচ সংযোগ তৈরি করা (ডায়নামিক আইপি, NAT এর পিছনেও ডায়নামিক আইপি রয়েছে, অথবা সম্ভবত আরও ভয়ঙ্কর কেস রয়েছে)) সার্ভারের সাথে (স্থায়ীভাবে অ্যাক্সেসযোগ্য) সার্ভারের সাথে অন্য রাউন্ডের চেয়ে অনেক সহজ।
কেউই নয়

1

@ কারও স্ক্রিপ্টের ভিত্তিতে, আমি এটিকে কিছু দরকারী মন্তব্য দিয়ে সাধারণীকরণ করেছি। নীচে আমার স্ক্রিপ্ট আছে।

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

নীতিগতভাবে এটি কুইনের উত্তরের সমান, তবে পৃথক কমান্ডের পরিবর্তে একটি ওয়ার্কিং স্ক্রিপ্ট হিসাবে প্রতিটি মেশিন / ব্যবহারের জন্য অভিযোজন প্রয়োজন।

আমি এতে ওভারহেড সম্পর্কে জানি না, এটি আমার কাছে মনে হয় এটি দুটি বার এনক্রিপ্ট করে / ডিক্রিপ্ট করে।

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

আমি হোস্টআউটথেন্টিকেশন ফর লোকালহোস্ট অক্ষম করি কারণ স্পষ্টতই লোকালহোস্ট যে কোনও কিছু হতে পারে। এটি সর্বজনীন কী প্রমাণীকরণের সাথে পুরোপুরি নিরাপদ। আপনার যাইহোক পাসওয়ার্ড ব্যবহার করা উচিত নয়, এমনকি পাসওয়ার্ডগুলির সাথে আপনি কোনও হোস্টের সাথে সংযোগ করছেন যা আপনি জানেন যে আপনি নিয়ন্ত্রণ করছেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.