আমার (তৃতীয়) পিসি থেকে দুটি দূরবর্তী হোস্টের মধ্যে স্কিপ


136

আমার দু'জন রিমোট হোস্ট আছে।
হোস্ট 1-> 10.3.0.1 হোস্ট
2-> 10.3.0.2
উভয়ই একটি এসএসএস সার্ভার চালায়।

Ssh সার্ভার হোস্ট 1-এ 22 পোর্ট এবং হোস্ট 2-তে 6969 পোর্টে শুনবে। এখন, আমার স্থানীয় মেশিনটি ব্যবহার করে, আমাকে হোস্ট 1 বা হোস্ট 2-এ ssh এর মাধ্যমে লগইন না করে হোস্ট 1 থেকে হোস্ট 2 তে কিছু কপি করতে হবে। কিছুটা এইরকম,

scp user@10.3.0.1:/path/to/file user@10.3.0.2/path/to/file

আমি এটি কীভাবে করতে পারি, দয়া করে নোট করুন যে দুটি হোস্ট ssh এর জন্য বিভিন্ন পোর্ট ব্যবহার করে।


আপনি কি জিজ্ঞাসা করছেন যে আপনি কি কোনও দূরবর্তী হোস্ট থেকে একটি দূরবর্তী হোস্টে স্থানান্তর করতে পারেন, বা আপনি পাসওয়ার্ড সরবরাহ না করে কীভাবে এটি করতে চান?
গ্লেন জ্যাকম্যান

-Pপতাকাটি বন্দরটি ব্যবহারের জন্য নির্দিষ্ট করার জন্য বিদ্যমান থাকলেও রিমোট-টু-রিমোট ট্রান্সফারের ক্ষেত্রে, প্রতি হোস্ট পোর্ট কীভাবে নির্দিষ্ট করতে হবে তার কোনও সংজ্ঞায়িত আচরণ হিসাবে ssh নয় ...
মভেরুন

উত্তর:


216

অতীতে, দূরবর্তী সিস্টেমগুলির মধ্যে ফাইলগুলি অনুলিপি করার জন্য scp( নিরপেক্ষভাবে ) যেভাবে কাজ করা হয়েছিল তা খুব অসুবিধাজনক ছিল: উদাহরণস্বরূপ আপনি যদি লিখে থাকেন তবে

    scp user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

scpপ্রথমে sshরিমোট 1 এ একটি সেশন খুলবে এবং তারপরে এটি scpসেখান থেকে রিমোট 2 এ চলে যাবে। এটি কাজ করার জন্য, আপনাকে রিমোট 1 এ রিমোট 2 এর জন্য অনুমোদনের শংসাপত্রগুলি সেট আপ করতে হবে।

পরিবর্তে এটি করার আধুনিক উপায়, ("আধুনিক" কারণ এটি কয়েক বছর আগে কার্যকর করা হয়েছিল এবং সম্ভবত প্রত্যেকেরই -3সাধ্য নেই scp) দুটি পদক্ষেপ প্রয়োজন requires প্রথম প্রয়োজনীয় পদক্ষেপটি ~/.ssh/configদূরবর্তী 1 এবং রিমোট 2 উভয়ের সাথে সংযোগের জন্য সমস্ত বিকল্প সেট আপ করতে ব্যবহার করা হয়:

    Host remote1.example.org
    Port 2222
    IdentityFile /path/to/host1-id_rsa

    Host remote2.example.org
    Port 6969
    IdentityFile /path/to/host2-id_rsa

এইভাবে অস্পষ্টতা ছাড়াই কমান্ডটিতে সমস্ত প্রয়োজনীয় বিকল্পগুলি পাস করা সম্ভব হয়ে উঠেছে : উদাহরণস্বরূপ, আমরা যদি সিআইএল উপরের কনফিগারেশন ছাড়াই 2222 ব্যবহার করি, তবে এটি স্পষ্ট হত না যে আমরা রিমোট 1 বা রিমোট 2 তে উল্লেখ করছি , এবং একইভাবে ক্রিপ্টোগ্রাফিক কীগুলি থাকা ফাইলটির জন্য। এইভাবে সি এল এল পরিষ্কার এবং সরল থেকে যায়।

দ্বিতীয়ত, -3নিম্নলিখিত হিসাবে বিকল্পটি ব্যবহার করুন :

    scp -3 user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

-3বিকল্প নির্দেশ scpপিসি যার উপর কমান্ড জারি করা হয়, যদিও এটা স্থানান্তরের একটি 3rd পার্টি মাধ্যমে রুট ট্রাফিক। এইভাবে, অনুমোদনের শংসাপত্রগুলি অবশ্যই তৃতীয় পক্ষের ইস্যুকারী পিসিতে থাকতে হবে।


6
ভবিষ্যতের রেফারেন্সের জন্য: আপনি যদি দুটি হোস্টের মধ্যে কোনও ফাইল অনুলিপি করেন যা একটি পরিচয় ফাইল ভাগ করে (কোনও ইসি 2 উদাহরণের মতো), তবে আপনার কনফিগার ফাইলটি লাগবে না। উভয় হোস্টের সাথে সংযোগ স্থাপনের জন্য এক-যুক্তি যথেষ্ট sufficient
আর্টুর সিজ্জাকা

1
গুগল কম্পিউট ইঞ্জিনের জন্যও লক্ষণীয়, আপনার ~/.ssh/configফাইলে যুক্ত করার জন্য সমর্থন রয়েছে : ক্লাউড.google.com/compute/docs/gcloud-compute তবে আমি মনে করি না যে AWS এর একই সমর্থন রয়েছে
Modulitos

1
যেহেতু আপনি সাধারণত আউটপুটটি দেখতে পাবেন না, তাই ভার্বোজ মোডটি সক্ষম করার জন্য একটি পরামর্শ -v
হলমার্ড

6

গতবার আমি চেষ্টা করেছিলাম, স্কিপ এটি করতে সক্ষম হয় নি। আপনার কমান্ড লাইন ঠিক আছে। এই কাজটি কাজ করবে:

ssh -p port_on_machine1 user@machine1 "cat /path/to/file/one"|ssh -p port_on_machine2 user@machine2 "cat >/path/to/file/two"

আমার স্কিপি ম্যান পৃষ্ঠাতে বলা হয়েছে "দুটি দূরবর্তী হোস্টের মধ্যে অনুলিপিগুলিও অনুমোদিত।"
গ্লেন জ্যাকম্যান

1
ধন্যবাদ, শুনতে ভাল লাগল। স্ক্রিপ করার জন্য আপনি একটি -P পতাকা দিতে পারেন (এটি কিছু বিএসডি লোক লিখেছিল, কারণ এটির যুক্তি হ্যান্ডলিংটি অত্যন্ত করুণ :-() তবে মনে হচ্ছে আপনি দূরবর্তী হোস্টগুলিতে বিভিন্ন পোর্ট নির্দিষ্ট করতে পারবেন না I দুঃখিত, কিন্তু আমি মনে করি, শুধুমাত্র এই কার্যসংক্রান্ত বামপন্থী (অথবা, trickier সমাধানের একটি অনেক আছে, SSH ব্যবহার কিন্তু scp কমান্ড এড়ানো - উদাহরণস্বরূপ, sftpfs জন্য, কিন্তু তারা সহজ না)। আমি বন্দর সেটিংসের সাথে আমার কার্যসংক্রান্ত বাড়ানো।
user259412

4

আমার ক্ষেত্রে, আমি -3যুক্তি সহ একটি দূরবর্তী থেকে দূরবর্তী অনুলিপিটি করছিলাম । '-P' প্যারামিটারের সাথে প্রদত্ত বন্দরটি 1 ম সার্ভারের সাথে কাজ করে, তবে পোর্ট 22 2 য়টি ব্যবহার করা হয়।

ssh -P 1234 user@server1.mydomain.com user@server2.otherdomain.com

সমাধানটি হ'ল /etc/ssh/ssh_configফাইলটি সম্পাদনা করা server1এবং এই লাইনগুলি যুক্ত করা:

Host *.otherdomain.com
   Port  1234

এইভাবে, 1234 বন্দরটি উভয়ের জন্যই ব্যবহৃত হয়। এটিও অন্যরকম হতে পারে।

এই সমাধানটির পূর্ববর্তী সমাধানগুলির চেয়ে ভাল থ্রুপুট রয়েছে, কারণ যোগাযোগ সরাসরি commun


পেরেজ কি কমম্যান লাইন থেকে দুটি পৃথক দূরবর্তী মেশিনের জন্য দুটি পৃথক বন্দর দিয়ে স্ক্র্যাপ অর্জনের উপায় আছে?
রেড বোতল

4

উত্স এবং টার্গেটটি ইউআরআই হিসাবে ফর্ম scp: // [ব্যবহারকারী @] হোস্ট [: পোর্ট] [/ পথ] এ নির্দিষ্ট করা যেতে পারে

যাতে আপনি চালাতে পারেন:

scp -3 scp://user@10.3.0.1:22/path/to/file scp://user@10.3.0.2:6969/path/to/file
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.