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


85

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

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

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

উত্তর:


48

এর পরিবর্তে আপনি -oবিকল্পগুলি যুক্ত করতে পারেন ।scp.ssh/config

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

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


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

এটি বিভিন্ন / কাস্টম ব্যবহারকারী নাম এবং পোর্টগুলির সাথে কেমন হবে?
পাবলো এ

আমি এটি চেষ্টা করেছিলাম এবং অবশ্যই পাসওয়ার্ড ইনপুট করতে হবে। আমি এটা কিভাবে ঠিক করবো. ধন্যবাদ।
htt

44

ওপেনএসএসএইচ ধরে নেওয়া, .ssh / কনফিগারেশনে আপনার এসএসএইচ কনফিগারেশনে যুক্ত করুন

Host distant
ProxyCommand ssh near nc distant 22

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

এটি কাজ করার জন্য আপনার কাছাকাছি নামক যন্ত্রটিতে 'এনসি' ওরফে নেটক্যাট লাগানো দরকার। তবে অনেকগুলি আধুনিক সিস্টেম এটি ইতিমধ্যে থাকবে।

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


এটি একই পদ্ধতিটি আমি ব্যবহার করি ... উদাহরণ হিসাবে 'দূরবর্তী' সার্ভার সি হবে এবং 'কাছাকাছি' স্পষ্টকরণের জন্য সার্ভার বি হবে ...
জেরেমি বাউস

অনেকগুলি আধুনিক মেশিনে 'এনসি' থাকে না: এটি সাধারণত লিনাক্স মেশিনগুলিতে এবং কেবল অনুরোধের মাধ্যমে পাওয়া যায় (স্ট্যান্ডার্ড ইনস্টলের অংশ নয়)।
মেই

1
ssh এর এখন -W অপশন রয়েছে, এটি 'এনসি' ছাড়াই স্বয়ংক্রিয়ভাবে এটি করে, তবে আমি ভাবছি কেন
স্কিপ নেই -Wub

3
যদি আমি একমাত্র না তবে এটিই স্পষ্ট ছিল না: যদি উপরের ব্যবহারকারীর নামটি ব্যবহারকারীর nearনাম থেকে আলাদা হয় distantতবে নিকটবর্তী ব্যবহারকারী চলে যায় ProxyCommand ssh nearuser@near...এবং দূরবর্তী ব্যবহারকারী পৃথক User distantuserলাইনে চলে যায় ।
মিঃ মাইন্ড


19

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

Host distant
    ProxyCommand ssh near -W distant:22

তবে এটি নিকটে (বি) মেশিনে হ্যাঁ (ডিফল্ট) হতে AllowTcp ফরওয়ার্ডিংয়ের প্রয়োজন হবে

সম্পাদনা: খ উপর ওপেনএসএইচ 5.4+ প্রয়োজন



1
এবং খুব কমপক্ষে ওপেনএসএইচ 7.4 পি 1 হিসাবে, এখানে একটি "প্রক্সিজাম্প" কমান্ড রয়েছে যার মধ্যে কেবলমাত্র প্রতিটি ব্যবহারকারী @ হোস্ট: পোর্টকে কমা দিয়ে পৃথক করা হয় list নিস!
hmijail

প্রক্সিজাম্প দুর্দান্ত, তবে এটি কনফিগার ফাইল থেকে ব্যবহারকারী এবং আইডেন্টিটি ফাইল নেয় নি। প্রক্সিকম্যান্ড -W এটি করে এবং স্কিপ-এর সাথেও কাজ করে।
রিকফুসুসার

18

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

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 সহ পি এর সঠিক কেসটি ব্যবহার করতে ভুলবেন না


5

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

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

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

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

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


2

আপনি এটি বিপরীতেও করতে পারেন এবং এটি আরও সহজ।

মনে করুন আপনি যে মেশিনে ফাইলটি প্রেরণ করতে চান তার সাথে একটি ssh সেশন খোলা আছে। এই দূরতম-হপ পিসি, আমরা এই হপ 2 কল করব। আপনার "প্রক্সি" হোস্ট হপ 1 হবে। যে পিসি ফাইল-উত্স, আমরা সেই উত্সকে কল করব।

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

এখন খোলা টানেলের সেশনে আপনি হোপ 1 থেকে ফাইল_রিগিনে একই কাজ করতে পারেন।

হপ 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.

আপনি এখন হোপ 2 থেকে হোপ 1 থেকে উত্স-এ টানেল হয়েছেন। কাকতালীয়ভাবে, এখন 5555 এবং 6666 উভয় বন্দরটি মূল ভিত্তিতে খোলা রয়েছে, যা হপ 2 এর পোর্ট 22 তে পুনঃনির্দেশিত হয়েছে this এই সেশনের মধ্যে নিম্নলিখিত দুটিই হ্যাপ 2-এর বৈধ স্ক্রিপ রুট রয়েছে:

উত্স অনুসারে:

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

এইভাবে, আপনি মাঝে মাঝে কয়েকটি স্বতন্ত্র সংখ্যক হপ রাখতে পারেন এবং দু'হপেরও বেশি একসঙ্গে শৃঙ্খলাবদ্ধতার সাথে কাজ করা আরও সহজ।


1

একাধিক হোস্টের জন্য ব্যবহার করা যেতে পারে এমন একটি সেটআপের জন্য নীচের উদাহরণটি ওপেনশ কনফিগারেশনটি মানিয়ে নেওয়ার চেষ্টা করুন:

Host uat-*
     ProxyCommand ssh bastion-uat nc %h %p

এটি "uat-" দিয়ে শুরু হওয়া সার্ভারগুলির একটি সেট অনুমান করে যা কেবলমাত্র জাম্পবক্স / গেটওয়ে সার্ভার "ঘাঁটি-উট" এর মাধ্যমে অ্যাক্সেসযোগ্য। আপনি ForwardAgent yesযদি লগইন করতে কোনও কী ব্যবহার করেন তবে আপনি সম্ভবত যুক্ত করতে চান ।


ForwardAgent yesএই জন্য ব্যবহার করবেন না । এই ক্ষেত্রে এজেন্ট ফরওয়ার্ডিং প্রয়োজনীয় নয় কারণ কোনও ssh ক্লায়েন্ট ঘাঁটিতে চলছে না, এবং এজেন্টের দরকার নেই যখন ফরোয়ার্ড করা কেবল সুরক্ষা হ্রাস করতে চলেছে। এবং আমি মনে করি sshআপনার আদেশটি অনুপস্থিত। যদি কোনও সাম্প্রতিক sshসংস্করণ ব্যবহার করা হচ্ছে তবে আপনার প্রয়োজন নেই nc, আপনি ssh -W %h:%p bastion-uatতার পরিবর্তে টাইপ করতে পারেন ।
কাস্পারড

@ ক্যাস্পার্ড এসএসএস অন্তর্ভুক্ত করার জন্য সম্পাদিত। ফরোয়ার্ড এজেন্ট; এনসি কমান্ড নিজে চালানোর জন্য একটি ssh ক্লায়েন্ট চলবে। সম্ভবত আপনি শেল উল্লেখ করছেন?
বেনিয়ামিন গুডাক্রে

1

এটি কোনও স্ক্যাপ নয় (যা ওপি অনুরোধ করেছিল), তবে আমি rsyncএকক হুপের সাহায্যে স্থানীয় থেকে রিমোটে অনুলিপি করতে খুব সহজ বলে মনে করেছি:

rsync -v -e 'ssh -A -t user@jumpserver ssh -A -t user@destinationserver' /path/to/sourcefile :/path/to/destination

সূত্র: http://mjbright.blogspot.com/2012/09/using-rsync-over-m Multi-hop-ssh.html

আমি উপরের-প্রক্সিপাস পরামর্শটি ব্যবহার করে দেখেছি এবং আমার পরিবর্তিত প্রয়োজনের জন্য কনফিগারেশন পরিবর্তন করতে চাই না। উপরের লিঙ্কটিতে লেখক হিসাবে উল্লেখ করেছেন, গন্তব্য ফাইল পূর্ববর্তী কোলন (:) পূর্বনির্ধারিত গন্তব্য সার্ভারে নির্দিষ্ট পথটি নির্দেশ করা গুরুত্বপূর্ণ। এছাড়াও, আরএসআইএনসি ব্যবহার করে আপনার কাছে তারিখের তুলনা, ফোল্ডার সিঙ্ক ইত্যাদি বিকল্প রয়েছে I আমি আশা করি এটি কারও সহায়ক হবে!


-2

scp -o 'ProxyJump jumpboxname' somefilename.txt ফাইনালস্টেস্টেশনহোস্ট: / tmp /।


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