প্রশ্ন আমি মাল্টিহোপ এসসিপি স্থানান্তর কিভাবে করব?


আমি আমার মেশিন A থেকে সার্ভার সি থেকে একটি ফাইল অনুলিপি করতে চাই, তবে কেবল সার্ভার বি এর মাধ্যমে সার্ভার সি অ্যাক্সেস আছে।

সার্ভার বিতে প্রথম স্থানান্তর করার পরিবর্তে, লগ ইন করুন এবং তারপরে সার্ভার সি তে স্থানান্তরিত করুন, ফাইলটিকে সরাসরি এসসিপি বা অনুরূপ প্রোগ্রামগুলির সাথে স্থানান্তরিত করা কি সম্ভব?

(Emacs ট্রাম মোড দূরবর্তী ফাইল সম্পাদনা করার জন্য এই বৈশিষ্ট্য আছে)।


76
2017-07-08 12:09


উত্স




উত্তর:


OpenSSH অনুমান করা হচ্ছে, আপনার এসএসএইচ কনফিগারেশনে .ssh / config এ যোগ করুন

Host distant
ProxyCommand ssh near nc distant 22

এটি এসএসএইচ নামক মেশিনের মাধ্যমে প্রক্সি করে দূরবর্তী নামে মেশিনে "সরাসরি" সংযোগ করতে সক্ষম হবেন। এটি তারপর দূরবর্তী মেশিনে স্কপ এবং sftp মত অ্যাপ্লিকেশন ব্যবহার করতে পারেন।

এই কাজ করার জন্য আপনাকে কাছাকাছি নামযুক্ত মেশিনে 'nc' aka netcat ইনস্টল করা প্রয়োজন। কিন্তু অনেক আধুনিক সিস্টেম ইতিমধ্যে এটি হবে।

টুপোর টর সমাধানটি এক-শট সমস্যাগুলির জন্য আরও কার্যকর, মনে হচ্ছে আপনি টারের সিনট্যাক্স এবং ক্রিয়াকলাপের নিয়মগুলি মনে রেখেছেন।


43
2017-07-08 12:25



এই একই পদ্ধতি আমি ব্যবহার করি ... এই উদাহরণে 'দূরবর্তী' সার্ভার সি এবং 'নিকটস্থ' স্পষ্টকরণের জন্য সার্ভার বি হবে ... - Jeremy Bouse
অনেকগুলি আধুনিক মেশিনগুলিতে 'এনসি' নেই: এটি কেবলমাত্র লিনাক্স মেশিনগুলিতেই পাওয়া যায় এবং শুধুমাত্র অনুরোধের ভিত্তিতে (স্ট্যান্ডার্ড ইনস্টলেশনের অংশ নয়)। - Mei
ssh এখন -W বিকল্প আছে, এটি স্বয়ংক্রিয়ভাবে 'এনসি' ছাড়াই এটি করে, তবে আমি SCP -W না কেন ভাবছি - kubanczyk
যদি আমি একমাত্র নই তবে এটি সুস্পষ্ট ছিল না: যদি ব্যবহারকারীর নাম থাকে near ব্যবহারকারীর নাম থেকে ভিন্ন distant, কাছাকাছি ব্যবহারকারী মধ্যে যায় ProxyCommand ssh nearuser@near..., এবং দূরবর্তী ব্যবহারকারী একটি পৃথক মধ্যে যায় User distantuser লাইন। - Mu Mind
শুধু ssh মাল্টি আশা টাইপ করুন এবং গুগল টিপুন আমি ভাগ্যবান বোধ করছি - chandank


আপনি যোগ করতে পারেন -o অপশন scp পরিবর্তে .ssh/config

scp -o ProxyCommand="ssh $jump_host nc $host 22" $local_path $host:$destination_path

$jump_host এই ক্ষেত্রে আপনার "সার্ভার বি" হয়।


41
2018-01-11 17:30



থি সি এই আমার পছন্দসই উপায়। মাল্টিহপিংয়ের জন্য এসএসএস / কনফিগারেশনটি সর্বোত্তম সমাধান নয় যদি আপনি গেটওয়ে থেকে সরাসরি এবং একই হোস্ট থেকে অ্যাক্সেস করেন। - GabrieleV
কিভাবে এই বিভিন্ন / কাস্টম ব্যবহারকারীর নাম এবং পোর্ট সঙ্গে হবে? - Pablo Bianchi


এসএসএস এর সাম্প্রতিক সংস্করণগুলির সাথে কাছাকাছি (B) মেশিনের কাছাকাছি নিম্নলিখিত নেটক্যাট ছাড়া কাজ করবে:

Host distant
    ProxyCommand ssh near -W distant:22

তবে এটি কাছাকাছি (বি) মেশিনে AllowTcpForwarding হ্যাঁ (ডিফল্ট) হতে হবে

সম্পাদনা করুন: B তে OpenSSH 5.4+ প্রয়োজন


19
2018-03-20 01:04



একটি যাদুমন্ত্র মত কাজ করে :) - gongzhitaao
এবং কমপক্ষে OpenSSH 7.4p1 হিসাবে, একটি "প্রক্সিজম্প" কমান্ড রয়েছে যা শুধুমাত্র প্রতিটি ব্যবহারকারী @ হোস্ট: পোর্টকে কমা দিয়ে আলাদা করে তালিকাবদ্ধ করে। নিস! - hmijail
ProxyJump সুন্দর, কিন্তু কনফিগারেশন ফাইল থেকে ব্যবহারকারী এবং আইডেন্টিফাইফিলটি গ্রহণ করে নি। ProxyCommand -W এই কাজ করে এবং scp দিয়েও কাজ করে। - rickfoosusa


আপনি সার্ভার বি কিছু ব্যবহার করে ssh করতে পারেন

ssh -L 5022:<server C IP>:22 <user_serverB>@<server B IP>

তারপর আপনি সার্ভার সি ব্যবহার করে ssh করতে পারেন

ssh -p 5022 <user_serverC>@localhost 

একইভাবে scp ব্যবহার করে কাজ করবে

scp -P 5022 foo.txt <user_serverc>@localhost:

Scp এবং ssh দিয়ে p এর সঠিক ক্ষেত্রে ব্যবহার করতে মনে রাখবেন


15
2017-07-08 13:02





আপনি সত্যিই দুষ্ট হতে চান, আপনি চেন ssh এবং tar, কিছু ভালো হতে পারে tar c mydir | ssh server "ssh otherserver | tar x", কিন্তু এই সমস্যা সব হাত মধ্যে চালাতে পারেন।

সহজ পদ্ধতি এসএসএইচ অন্তর্নির্মিত পদ্ধতিগুলির সাথে একটি এসএসএইচ সুড়ঙ্গ সেট আপ করা হবে; তাকাও -D manpage এ স্যুইচ করুন এবং কিছু পোর্ট ফর অন্যান্য সার্ভারের এসএসএস পোর্টের দিকে এগিয়ে যান।


3
2017-07-08 12:16





এটি সম্ভাব্য এবং অপেক্ষাকৃত সহজ, এমনকি আপনি যখন প্রমাণীকরণের জন্য শংসাপত্রগুলি ব্যবহার করতে চান তখনও (সাধারণত AWS পরিবেশগুলিতে)।

নীচের কমান্ড একটি থেকে ফাইল কপি হবে remotePath উপর server2 সরাসরি আপনার মেশিনে localPath। অভ্যন্তরীণভাবে scp অনুরোধ মাধ্যমে প্রক্সি করা হয় server1

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

কাছাকাছি অন্যান্য উপায় কাজ করে (আপলোড ফাইল):

scp -i user2-cert.pem -o ProxyCommand="ssh -i user1-cert.pem -W %h:%p user1@server1" <localpath> user2@server2:/<remotePath>

আপনি পরিবর্তে পাসওয়ার্ড প্রমাণীকরণ ব্যবহার করে, সঙ্গে চেষ্টা করুন

scp -o ProxyCommand="ssh -W %h:%p user1@server1" user2@server2:/<remotePath> <localpath>

আপনি যদি উভয় সার্ভারগুলিতে একই ব্যবহারকারীর শংসাপত্র ব্যবহার করেন:

scp -o ProxyCommand="ssh -W %h:%p commonuser@server1" commonuser@server2:/<remotePath> <localpath>

3
2017-10-08 01:24





আপনি বিপরীত এই কাজ করতে পারেন এবং সম্ভবত সহজ।

আপনি যদি ফাইলটি পাঠাতে চান তবে মেশিনের সাথে একটি এসএসএস সেশন খোলা আছে বলে মনে হচ্ছে। এই দূরবর্তী হপ পিসি, আমরা এই hop2 কল করব। আপনার "প্রক্সি" হোস্ট hop1 হবে। ফাইল উৎপত্তি যে পিসি, আমরা যে মূল কল করব।

origin:~/asdf.txt  --> hop1 --> hop2:~/asdf.txt

আপনি একটি দূরবর্তী পিসি একটি স্থানীয় পোর্ট উপলব্ধ টানেল নির্মাণ করতে পারেন। আমরা দূরবর্তী পিসি থেকে খুলতে একটি পোর্ট সংজ্ঞায়িত করছি, যা আপনি টানেলটি নির্মাণ করার সময় আপনার সাথে যে বন্দরটি টেনে নিয়েছিলেন তা পুনঃনির্দেশিত হবে।

হপ 2:

ssh -R 5555:127.0.0.1:22 <hop1_user>@<hop1_IP>
#this has the effect of building a tunnel from hop2 to hop1, making hop2's port 22 available on hop1 as port 5555

এখন যে খোলা টানেল অধিবেশন, আপনি hop1 থেকে file_origin থেকে একই কাজ করতে পারেন।

হপ 1:

ssh -R 6666:127.0.0.1:5555 <origin_user>@<origin_IP>
#this has the effect of building a tunnel from hop1 to origin while also pulling the active tunnel with it, making hop1's port 5555 (hop2's port 22) available on origin as port 6666.

আপনি এখন hop2 থেকে hop1 থেকে উদ্ভাবিত tunneled হয়। ঘটনাক্রমে, এখন উভয় পোর্ট 5555 এবং 6666 মূল্যে খোলা রয়েছে, যা হপ ২ এর পোর্ট 22 এ পুনঃনির্দেশিত হয়। এই সেশনের মধ্যে, নিম্নলিখিত দুটি হল hop2 এ বৈধ scp রুট:

উত্স:

scp -P 6666 ~/asdf.txt <hop2_user>@<127.0.0.1>:~/asdf.txt

এই ভাবে, আপনার মধ্যে কিছু হুপ্স হপ্স থাকতে পারে এবং দুইটি হপের সাথে একসাথে চেইন করার শর্তে কাজ করা সহজ।


2
2017-11-18 20:22