মধ্যবর্তী হোস্টের মাধ্যমে স্কাইপ ফাইলগুলি files


84

আমার কাছে 3 টি মেশিন, এ, বি এবং সি অ্যাক্সেস রয়েছে কেবলমাত্র সম্ভাব্য (এসএসএস) সংযোগগুলি হ'ল:

A -> B
B <-> C

আমার A থেকে C পর্যন্ত ফাইলগুলি পাওয়া দরকার, তাই আমি এগুলি থেকে বি তে ফাইলগুলি স্ক্রিপ করতে পারি এবং তারপরে বি থেকে সি পর্যন্ত স্ক্র্যাপ করতে পারি তবে বি-তে খুব বেশি ডিস্কের স্থান নেই তাই এটি কোনও বিকল্প নয়। এ থেকে বি এর মাধ্যমে ফাইলগুলি স্ক্র্যাপ করার কোনও উপায় আছে কি? দ্রষ্টব্য, আমার কোনও মেশিনে রুট অ্যাক্সেস নেই, তাই আমি মনে করি না যে আমি কোনও ধ্রুবক টানেল স্থাপন করতে পারি, তবে আমি ভুল হলে আমাকে সংশোধন করতে পারি!


6
আমি জানি এটি প্রশ্নের উত্তর দেয় না, তবে যারা আরএসসিএনসি সম্পর্কে জানেন না, বা হোস্টের মাধ্যমে হ্যাপ করার জন্য কীভাবে এটি ব্যবহার করবেন জানেন না তাদের জন্য এটি একটি দরকারী টিপ হতে পারে: '-e' বিকল্পটি ব্যবহার করুন এর মতো A$ rsync <options> -e 'ssh B ssh' source C:destination
আরএসআইএনসি সহ

উত্তর:


107

ProxyJump

ওপেনএসএইচ 7.3 এ নতুন:

A$ scp -oProxyJump=B thefile C:destination

(পর্দার আড়ালে, এটি কেবল প্রক্সিকম্যান্ড এবং ব্যবহার করে ssh -W))

ProxyCommand

অন্যান্য উত্তর থেকে -W অন্তর্ভুক্ত আপডেট হয়েছে:

A$ scp -oProxyCommand="ssh -W %h:%p B" thefile C:destination

যদি এ-তে খুব পুরানো এসএসএইচ ক্লায়েন্ট ইনস্টল করা থাকে ( -Wসমর্থন ছাড়াই ), বা বি টিসিপি ফরোয়ার্ডিং (তবে এখনও শেল কমান্ডের অনুমতি দেয়) অস্বীকার করার জন্য কনফিগার করা থাকে, তবে বিকল্পগুলি ব্যবহার করুন:

A$ scp -oProxyCommand="ssh B socat stdio tcp:%h:%p" thefile C:destination
A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination

পাইপ

A$ tar cf - thefile anotherfile | ssh B "ssh C \"cd destination && tar xvf -\""
A$ (echo thefile; echo anotherfile) | cpio -o | ssh B "ssh C \"cd destination && cpio -i\""

শুধুমাত্র একটি ফাইলের জন্য:

A$ ssh B "ssh C \"cd destination && cat > thefile\"" < thefile

বি এর মাধ্যমে "টানেল"

A$ ssh -f -N -L 4567:C:22 B
(continues running in background)

A$ scp -P 4567 thefile localhost:destinationPath

আপনার কাজ শেষ হয়ে গেলে, আগের শুরু হওয়া sshপ্রক্রিয়াটি (যা কারণে ব্যাকগ্রাউন্ডে নেমে গেছে -f -N) হত্যা করতে ভুলবেন না ।

  • -fকমান্ড প্রয়োগের ঠিক আগে পটভূমিতে যাওয়ার জন্য ssh কে অনুরোধ করুন। এটি দরকারী যদি ssh পাসওয়ার্ড বা পাসফ্রেজগুলির জন্য জিজ্ঞাসা করতে চলেছে তবে ব্যবহারকারী ব্যাকগ্রাউন্ডে এটি চায়। এটি বোঝায় -n।
  • -Nরিমোট কমান্ড প্রয়োগ করবেন না। এটি কেবল ফরওয়ার্ডিং বন্দরগুলির জন্য দরকারী।

বি থেকে এ পর্যন্ত "টানেল" বিপরীত করুন

যদিও সর্বদা কাজ করে না:

A$ ssh -f -N -R 4567:localhost:22 B
(now you can reach A from B, by using localhost:4567)

B$ scp -P 4567 localhost:thefile C:destination
  • -R নির্দিষ্ট করে যে দূরবর্তী (সার্ভার) হোস্টের প্রদত্ত টিসিপি পোর্ট বা ইউনিক্স সকেটের সংযোগগুলি স্থানীয় পক্ষের প্রদত্ত হোস্ট এবং পোর্ট বা ইউনিক্স সকেটে ফরোয়ার্ড করতে হবে।

এই উদাহরণগুলিতে @ গ্রাটিউটির জন্য অনেক ধন্যবাদ। একটি প্রশ্ন - এটি কি c টার সি সিফিল অন্য ফাইলকে উল্টানো সম্ভব?
সিএসএ

@ ডেমিউ: হ্যাঁ, এটা সম্ভব।
মাধ্যাকর্ষণ

কীভাবে পূর্বে শুরু করা ssh প্রক্রিয়াটি "হত্যা" করবেন যদি বলি যে আমি কোনও ম্যাকস ব্যবহার করছি?
অ্যারো উইন্ডোওয়াকার

দ্রষ্টব্য: স্বাভাবিক হিসাবে, আপনি করতে চান তাহলে scp থেকে সি, যদিও বি, করতে এ, আপনি কি করতে পারেন A$ scp -oProxyJump=B C:destination thefile
jvriesem

@ পাবলো আরও ভাল ব্যবহার করুন -এস, তারপরে এবং-ও প্রস্থান করুন। বা ... কমপক্ষে pkill -f।
মাধ্যাকর্ষণ

24

২০১১ সালের প্রথম দিকের স্কিপ সংস্করণে এবং পরে "-3" বিকল্প থাকতে পারে:

 -3      Copies between two remote hosts are transferred through the local
         host.  Without this option the data is copied directly between
         the two remote hosts.  Note that this option disables the
         progress meter.

আপনার যদি এটি থাকে তবে আপনি কেবল চালাতে পারেন:

B$ scp -3 A:file C:file

আমার ক্ষেত্রে হোস্ট এ কেবলমাত্র বি থেকে প্রবেশযোগ্য ছিল (যা ভিপিএনড ছিল) was হোস্ট সি বি তে একই ল্যানে ছিল A আমি এ থেকে সি পর্যন্ত একটি ফাইল পেতে চেয়েছিলাম এবং স্কেপ -৩ এটি দুর্দান্তভাবে সমাধান করে।
জো

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

8

প্রায় সবই ইতিমধ্যে বলা হয়েছে তবে এখানে আমার শেষ পেনিটি: আমি ncনা ছাড়াও প্রক্সিকম্যান্ড রূপটি ব্যবহার করি socওপেনএসএইচ প্রক্সি এবং জামফোস্ট কুকবুকের উপর ভিত্তি করে আমি নিম্নলিখিত কনফিগারেশনটি তৈরি করেছি:

  1. সুতরাং আমাদের নিম্নলিখিত খেলোয়াড় রয়েছে:

    • HOME_HOST: এখান থেকেই আমরা লক্ষ্য হোস্টে কোনও ফাইল অনুলিপি করি
    • HOP_HOST: আমরা এই হোস্টের মাধ্যমে অনুলিপি করি (HOP_USER হিসাবে লগড)
    • TARGET_HOST: এটি আমাদের গন্তব্য (TARGET_USER হিসাবে প্রমাণীকৃত)
  2. প্রথমে আমি আমার স্থানীয় পাবলিক কীটি আমার হোস্ট হোস্ট .ssh/id_dsa.pub থেকে .ssh/authorized_keysহপ এবং টার্গেট হোস্ট উভয়কে যুক্ত করেছিলাম । হ্যাঁ, হোম হোস্ট থেকে তাদের উভয়ের জন্য একই পাবলিক কী। সাধারণত আপনি আশা করতে পারেন এটি হরপ পাবলিক কী আপনার টার্গেটে যুক্ত করতে হবে।

  3. তারপরে আমি .ssh/configনিম্নলিখিত এন্ট্রি যুক্ত করে কিছুটা টুইট করেছি:

    Host TARGET_HOST
       User TARGET_USER
       ProxyCommand ssh -W %h:%p HOP_USER@HOP_HOST
    
  4. এরপর অনুলিপি ক্রিয়াকলাপ হিসাবে হিসাবে সহজ: scp FILE TARGET_HOST:। এটি হপ এবং লক্ষ্য নোড উভয় থেকেই ডাবল ব্যানার প্রদর্শন করে তবে এটি কার্যকর হয়।

অবশ্যই আপনাকে লক্ষ্য সরাসরি SSH উপরে ব্যবহার করতে পারেন: ssh TARGET_HOST। এটি scp এবং ssh এর সাথে কাজ করে।

আর একটি সাধারণ বিকল্প হতে পারে শাটল ইউটিলিটি যা এক ধরণের স্বচ্ছ প্রক্সি বলে মনে হয় (vpn over ssh)। সুতরাং আপনার এ-> বি <-> সি এর ক্ষেত্রে এটি সি এর নেটওয়ার্কের প্রতিটি নোডের সাথে সংযোগ করতে দেয়: এ-> বি- [সিডিইএফজি]। এটি অ্যাডমিনের প্রয়োজন নেই তবে এর জন্য পাইথন ২. requires প্রয়োজন (৩.৫ এছাড়াও ঠিক আছে) যা আমাদের কাছে সবসময় থাকে না। এটি চেষ্টা করার মতো মূল্য।


7
ssh -L 4321:hostC:22 youruser@hostB

অন্য শেলের মধ্যে:

scp -P 4321 localfile youruser@127.0.0.1

এটি পোর্ট ফরওয়ার্ডিং ব্যবহার করছে। পোর্ট ফরোয়ার্ডিংয়ের অনুমতি দিতে এখানে হোস্ট বিয়ের একমাত্র সীমাবদ্ধতাটি কনফিগার করা দরকার। অন্যথায় এটি ঠিক কাজ করা উচিত।

ব্যাখ্যার পথে -Lএবং -Rআপনাকে পোর্ট ফরওয়ার্ড করার অনুমতি দেয়। ইন -L, প্রদত্ত প্রথম বন্দরটি হ'ল পোর্ট এসশ শুরুতে থাকা মেশিনে (হোস্ট এ) শুনতে শুরু করবে, এবং এটি আপনার এসএসএইচ সংযোগের মাধ্যমে হোস্ট বি-তে, তারপরে পোর্ট 22-এ হোস্ট সি-এর উদ্দেশ্যে যে বন্দুকটি পেয়েছে তা ফরোয়ার্ড করবে।

সম্পাদন করা

আমি সিনট্যাক্সটি কিছুটা গণ্ডগোল করলাম। এটি আপনার স্থানীয় মেশিনে একটি ফরোয়ার্ড সেট আপ করে।


@ এস্ট্রোফ্রোগ - আমাদের উত্তরগুলির মধ্যে যদি কোনও একটি আপনার চাহিদা পূরণ করে তবে আপনার সম্ভবত সেগুলির একটি গ্রহণ করা উচিত।
ব্রায়ান ভ্যানডেনবার্গ

2

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

মেশিন এ: আপনি যে মেশিনটি চালু করছেন

সার্ভার বি: userB@ip.address.for.B (জাম্প হোস্ট বা মিডল সার্ভার)

সার্ভার সি: userC@ip.address.for.C (যে রিমোট সার্ভারটি আপনি অনুলিপি করতে চান)

ProxyCommnad

    A$ scp -oProxyCommand="ssh -W %h:%p userB@ip.address.for.B" thefile userC@ip.address.for.C:destination

কংক্রিট উদাহরণ

সুতরাং একটি দৃ concrete় উদাহরণের জন্য, আপনার আইপি 0.0.1.2সহ একটি সার্ভার অ্যাক্সেস আছে বলে bar(সার্ভার সি) নামের একটি অ্যাকাউন্টে অ্যাকাউন্ট রয়েছে । তবে এটি পেতে আপনাকে প্রথমে আইপি 0.0.1.1দিয়ে একটি সার্ভারে লগইন করতে হবে foo( অ্যাকাউন্টে সার্ভার বি) নামের অ্যাকাউন্ট account এখন আপনি ফাইল অনুলিপি করতে চান baz.txtসার্ভারের সাথে আপনার বর্তমান মেশিন (মেশিন একটি) অবস্থিত 0.0.1.2'র /home/bar/ডিরেক্টরি। এই উদাহরণের জন্য উপরের প্রক্সিকম্যান্ড ব্যবহার করতে আপনি নিম্নলিখিতগুলি সম্পাদন করবেন:

    A$ scp -oProxyCommand="ssh -W %h:%p foo@0.0.1.1" baz.txt bar@0.0.1.2:/home/bar/

আপনি সার্ভার সি থেকে সহজেই ফাইল এবং গন্তব্যটির ক্রম স্যুইচ করে কোনও ফাইল অনুলিপি করতে পারবেন। সুতরাং উদাহরণস্বরূপ, যদি baz.txtইতিমধ্যে 0.0.1.2অবস্থিত সার্ভারে থাকে /home/bar/তবে আপনি এটি ব্যবহার করে এটি আপনার মেশিনে অনুলিপি করতে পারেন:

    A$ scp -oProxyCommand="ssh -W %h:%p foo@0.0.1.1" bar@0.0.1.2:/home/bar/baz.txt /destination/path/on/A

আশা করি এটি সেই ব্যক্তিকে সহায়তা করে যা প্রয়োজনীয় জিনিসগুলির জন্য অন্যদের চেয়ে কিছুটা বেশি বানান।

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