স্থানীয় মেশিন থেকে একটি কমান্ড সহ একটি প্রক্সি উপর স্ক্র্যাপ?


54

আমার কাছে আমার লোকাল.মাছাইন, প্রক্সি.ম্যাচিন এবং টার্গেট.ম্যাচিন রয়েছে। লোকাল.ম্যাচিনের টার্গেট.ম্যাচিনের সাথে সরাসরি যোগাযোগ নেই, তবে প্রক্সি.ম্যাচিনের মধ্য দিয়ে যেতে হবে।

আমি টার্গেট.ম্যাচাইন থেকে লোকাল.ম্যাচিনে কোনও ফাইল স্ক্রিপ করতে চাই। স্থানীয়.ম্যাচাইন থেকে কেবল একটি আদেশ দিয়ে কি এটি করা সম্ভব?

উত্তর:


64

আমি জানি এটি একটি দেরী উত্তর, তবে আমি এটি করার একটি দুর্দান্ত উপায় খুঁজে পেয়েছি। এটি মূলত হোলার জাস্টের উত্তর, তবে একটি সংরক্ষিত কনফিগারেশনের ফাইলটিতে:

আপনার ~/.ssh/configএটিকে লোকাল.ম্যাচিনে আপনার ফাইলে রাখতে হবে (ফাইলটি উপস্থিত না থাকলে তৈরি করা)

Host target.machine
  User          targetuser
  HostName      target.machine
  ProxyCommand  ssh proxyuser@proxy.machine nc %h %p 2> /dev/null

ফাইলটি সংরক্ষণ করার পরে, আপনি কেবল ব্যবহার করতে পারেন

ssh target.machine

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


5
শুধু একটি দ্রুত নোট। আপনি যদি ssh- র জন্য -i কমান্ড লাইন বিকল্পের মাধ্যমে বিকল্প পরিচয় ফাইলটি ব্যবহার করেন তবে আপনাকে প্রক্সিকমন্ড কনফিগারেশন এবং ssh কমান্ড লাইন উভয়ের জন্য সেই বিকল্পটি নির্দিষ্ট করতে হবে।
বিলম্যান

7
3 টি জিনিস যা সহায়তা করতে পারে, 1) আপনি যদি Host proxy.machineএকই ~/.ssh/configফাইলের লাইনগুলি দেখান তবে এটি সাহায্য করবে , 2) এই আদেশগুলি নেস্ট করা যায় কিনা তা উল্লেখ করুন (অর্থাত্ ক্লায়েন্ট প্রক্সি হোস্ট 1 এর সাথে সংযোগ স্থাপন করে যা প্রক্সি হোস্ট 2 এর সাথে সংযোগ স্থাপন করে)। ..আরটিজেট) এবং 3) এর nc %h %pঅর্থ
পুক

প্রক্সি দিয়ে মেশিনকে লক্ষ্য করতে আমরা কীভাবে স্থানীয় মেশিন থেকে অনুলিপি করতে পারি?
মুলাগালা

19

আপনি এটি একটি কমান্ডে করতে পারেন, তবে আপনার প্রক্সি মেশিনে নেটক্যাট (এনসি) ইনস্টল করা দরকার:

ssh -o "ProxyCommand ssh poxyuser@proxy.machine nc -w 1 %h 22" targetuser@target.machine

[সম্পাদনা: মেশিনগুলির ক্রম মিশ্রিত করা ...]


খুব ভাল চেষ্টা করুন, তবে প্রক্সি এবং লগইনের জন্য আমি কোথায় ব্যবহারকারীর নামটি যুক্ত করব?
grm

@ এর সাথে মেশিনের নামের আগে জেজেস্ট। আমি আমার উত্তর সম্পাদনা করেছি যে প্রতিফলিত করতে।
হলগার মাত্র

19

আপনি এখন * কোথাও প্রয়োজন ছাড়াই ওয়ান-লাইনার হিসাবে এটিnc করতে পারেন:

scp -o "ProxyCommand ssh pcreds@proxy.machine -W %h:%p" tcreds@target.machine:file .

ব্যাখ্যা

pcredsএবং tcredsআপনার প্রক্সি এবং টার্গেট পরিচয়পত্র প্রতিনিধিত্ব প্রয়োজনে ( username, username:password, ইত্যাদি)।

ncমধ্যবর্তী হোস্টের জন্য প্রয়োজনীয়টি অপসারণ করে একটি অন্তর্নির্মিত নেটক্যাট-সদৃশ দক্ষতার কারণে এটি সম্ভব । ssh -W host:portনির্দিষ্ট হোস্ট এবং বন্দরে একটি সুড়ঙ্গ সেট আপ ব্যবহার করে এটি স্টিডিন / স্টাডাউটের সাথে সংযুক্ত করে এবং তারপরে scpটানেলের উপর দিয়ে চলে।

%hএবং %pProxyCommandলক্ষ্য হোস্ট এবং পোর্ট উল্লেখ দিয়ে প্রতিস্থাপিত করা হয়।

আরও সুবিধার জন্য, আপনি নিজের এসএসএস কনফিগারেশনে প্রক্সিটি কনফিগার করতে পারেন:

Host target.machine
    ProxyCommand ssh pcreds@proxy.machine -W %h:%p

এবং তারপর থেকে ঠিক কি

scp tcreds@target.machine:file .

* ওপেনএসএইচ 5.4 - মার্চ 2010 এ প্রকাশিত


1
যাচাই করা হয়েছে এটি প্রকৃতপক্ষে ভাল কাজ করে এবং প্রক্সি মেশিনে বাসি এনসি প্রক্রিয়াগুলি ফেলে না।
ল্যাক্সড্রাগন 15

1
আমি প্রক্সিটির বন্দরটি কোথায় নির্দিষ্ট করতে পারি?
Marged

1
@ মার্জেড আমি এই মুহুর্তে এখানে চেষ্টা করার মতো অবস্থানে নেই, তবে আমি মনে করি যে আপনি উভয় পদ্ধতিতে প্রক্সি পোর্টটি নির্দিষ্ট করার -p <portnum>আগে অন্তর্ভুক্ত করতে সক্ষম হবেন-W
কাপউনটাএ

1
-I বিকল্পটি (যদি আপনার এটির প্রয়োজন হয়) উদ্ধৃতিগুলির ভিতরে চলে যায় তা নির্ধারণ করতে আমার কিছুটা সময় লেগেছিল । প্রক্সি ssh ডিফল্টরূপে scp- এ সরাসরি সরবরাহ করা কোনও -i বিকল্প দ্বারা নির্দিষ্ট একই বেস কী ব্যবহার করে না। আমার ধারণা আপনি যখন এটি সম্পর্কে চিন্তা করবেন তখন তা স্পষ্ট about
কেইলি

18

যদি আপনি scp এর পরিবর্তে rsync ব্যবহার করতে আপত্তি না করেন তবে আপনি নিম্নলিখিত ওয়ান-লাইনারটি ব্যবহার করতে পারেন:

rsync -v --rsh "ssh proxy.machine ssh" target.machine:/remote/file /local/dir/

(আপনার প্রক্সি মেশিনে পাসওয়ার্ডহীন অ্যাক্সেসের প্রয়োজন হবে)


8
$ ssh -f -N -L <localport>:<target.machine:port> user@proxy.machine
$ scp target-user@local.machine:/remote/file -P <localport> .

ঠিক আছে, আসলে দুটি কমান্ড ...


1
আমি কীভাবে আমার প্রক্সিটির বন্দরটি নির্দিষ্ট করতে পারি? আমার ক্ষেত্রে8080
Marged

@ মার্জড -p <portnumber>আপনার
এসএসএস

6

ওয়ান লাইনার? আমার মাথার উপরের অংশটি বন্ধ নয়। আপনাকে প্রথমে একটি প্রক্সি স্থাপন করতে হবে এবং আপনি নিজে থেকে স্কিপ দিয়ে এটি করতে পারবেন না।

ম্যানুয়ালি এটি করার সময়, আমি আমার টানেলের জন্য একটি স্ক্রিন সেশন খুলি:

screen -S tunnel

স্ক্রিনটি টানেলটিকে পটভূমিতে রাখাতে রাখতে ব্যবহার করা হয়। আপনি পটভূমিতে টানেলটি উন্মুক্ত রাখতে চান এমন কোনও কৌশল ব্যবহার করুন (@ সাপ্তাহিক উত্তর সম্ভবত সবচেয়ে সহজ)। একবার স্ক্রিন সেশনে আমি আমার টানেলটি শুরু করি

ssh -L 2222:target.machine:22 [user@]proxy.machine

এটিকে ভেঙে ফেলার জন্য, এটি মূলত বলেছে "আমার লোকাল মেশিনে, ওপেন পোর্ট 2222 এবং লোকালহোস্টে যে কোনও সংঘাত রয়েছে: 2222 টার্গেট.ম্যাচিনে প্রক্সি দিয়ে তৈরি করা হয়েছে: ম্যাচাইন: 22"

একবার আপনি ssh সংযোগ এবং টানেল স্থাপন হয়ে গেলে, "Ca d" দিয়ে স্ক্রিন সেশন থেকে আলাদা করুন। স্ক্রিন সেশনে ফিরে যেতে টাইপ করুনscreen -raAd tunnel

আপনি একবার নিজের আসল শেলটিতে ফিরে এলে আপনার scp কমান্ডটি দেখতে পাবেন

scp -P 2222 localhost:your/file/on/target.machine local/path

মনে রাখবেন যে লোকালহোস্ট পোর্ট 2222 সত্যিই কেবল একটি টানেল target


3

দেখা যাচ্ছে যে স্কিপ এসএসএস-র মতো "-o" বিকল্পকে সমর্থন করে, যদিও আমি কীভাবে এটি প্রক্সি ব্যবহারকারীর নাম / পাসওয়ার্ডটি পাস করব তা নিশ্চিত নই:

scp -o "ProxyCommand=nc -X connect -x proxyhost:proxyport %h %p" remote_user@remote_host:remote_path local_path

আপনি পেতে পারেন nc: invalid option -- Xদেখতে https://stackoverflow.com/a/23616021/32453


ডোপ ব্রো, সরাসরি কাজ করেছেন :)
এলুয়ান কেরিয়েল-এমনকি

2

কেমন:

scp -o "ProxyCommand ssh user@myproxyserver.com nc %h %p" your.filename username@yourdestination.yourdomain.com:/whatever_location

অথবা সম্ভবত ব্যবহারকারীর নাম: পাসওয়ার্ড এখানে?
রজারডপ্যাক

1

আপনি এরকম কিছু চেষ্টা করতে পারেন:

ssh user@proxy.machine "ssh user@target.machine 'cat > file'" < file

তবে যদি আপনার প্রক্সি.ম্যাচাইন আপনাকে পাসওয়ার্ড জিজ্ঞাসা করতে চায় তবে এটি কাজ করবে না (যে এসএসএইচ টিটিওয়াইতে নেই, তাই জিজ্ঞাসা ব্যর্থ হবে)।

আপনার যদি একাধিক ফাইল থাকে তবে আপনি এই জাতীয় টারটি ব্যবহার করতে পারেন (অনির্ধারিত, আমি সাধারণত নেটক্যাটটি সেভাবেই ব্যবহার করি):

tar cf - file1 file2 folder1/ | ssh user@proxy.machine "ssh user@target.machine 'tar xvf -'"

1

আরেকটি সহজ সমাধান একটি স্থানান্তর করতে source_file থেকে source_host একটি থেকে destination_host এর মাধ্যমে একটি proxy_host :

প্রক্সি_সভারে লগ ইন করুন :

ssh login@proxy_host

প্রক্সি সার্ভার থেকে, হস্তান্তর source_file থেকে source_host করার destination_host (আপনি এক লাইন হিসাবে এই টাইপ করতে পারেন বাদ \, অথবা দুই লাইন হিসাবে, নিচে দেখানো হয়েছে):

scp login@source_host:/path_to_source_file \
  login@destination_host:/path_to_destination_directory

এটির প্রয়োজন যে উত্স_ হোস্টে প্রক্সি_হোস্টে লগইন করতে একটি আরএসএ_কি ব্যবহার করা উচিত।


0

আপনার যদি পাবলিক কীগুলি ব্যবহার করতে হয় তবে আপনার এর মতো কিছু দরকার হবে।

Host target-machine
  User          target-user
  HostName      target.example.com
  IdentityFile  /path/to/file.pem
  ProxyCommand  ssh bastion -W %h:%p

Host bastion
  User         bastion-user
  HostName     bastion.example.com
  IdentityFile /path/to/file.pem

0

আমি এই নিবন্ধটি অনুসরণ করেছি এবং একটি উত্তর খুঁজে পেয়েছি যা আমার পক্ষে কার্যকর। (কারণ উপরের উত্তরগুলি আমার পক্ষে কার্যকর নয়)।

scpএকটি মধ্যবর্তী হোস্টের মাধ্যমে ফাইল কীভাবে (ওরফে জাম্প হোস্ট) http://mperdikeas.github.io/networking.html.files/scp-a-file-through-jump-host.html

এবং আমার উত্তর নীচের মত:

scp -oProxyCommand="ssh -W %h:%p {username}@{proxy_IP}" \
        {source_file} {remote_username}@{remote_IP}:{remote_file_path}

উদাহরণ:

scp -oProxyCommand="ssh -W %h:%p ubuntu@10.60.10.145" \
        archive.gz wise@35.xxx.xxx.xxx:/home/wise/archive.gz

আমি আশা করি এই উত্তরটি আপনাকে সহায়তা করতে পারে।

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