একটি মাঝারি মেশিনের মাধ্যমে এসএসএইচ ট্র্যাফিক ফরওয়ার্ড করুন


110

এসএসএইচ টানেলিং আমার কাছে খুব বিভ্রান্তিকর। আমি ভাবছি আমি লিনাক্স এ এটি করতে পারি কিনা।

আমার কাছে 3 টি মেশিন আছে ..

A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.

সুতরাং আমি এ -> বি থেকে এবং বি -> সি থেকে এসএসএইচ করতে পারি তবে এ -> সি থেকে নয় C.

এ থেকে বি এর মাধ্যমে এসএসএইচ টানেল সেটআপ করার কোনও উপায় আছে, তাই যখন আমি অন্য এসএসএইচ কমান্ড চালনা করি তখন তারা কেবল আমার স্থানীয় মেশিন এ থেকে কাজ করে? আমি মূলত কাজ থেকে ঘরে ঘরে গিট রেপো ক্লোন করার চেষ্টা করছি (এবং আমি মেশিন বিতে গিট ইনস্টল করতে পারি না)।

এছাড়াও, একবার সেটআপ .. আমি কীভাবে এটি আনসেট করব?


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



আপনি যদি মেশিন এ তে লিনাক্স চালাচ্ছেন, তবে শাটল নামক একটি সরঞ্জামটি ব্যবহার করুন, যা আপনাকে সি- এর মাধ্যমে A-> বি টানেলের মাধ্যমে সমস্ত ট্রাফিক নির্বাচন করে এগিয়ে নেবে (ধরে নেওয়া যায় যে সি বি থেকে দৃশ্যমান)।
জোট

উত্তর:


128

.ssh/configএটি হোস্টএতে আপনার ফাইলে রাখুন ( বিশদটির জন্য ম্যান 5 ssh_config দেখুন):

# .ssh/config on hostA:
Host hostC
    ProxyCommand ssh hostB -W %h:%p

এখন নিম্নলিখিত কমান্ডটি হোস্টবি এর মাধ্যমে স্বয়ংক্রিয়ভাবে সুড়ঙ্গ হবে

hostA:~$ ssh hostC

আপনি ইতিমধ্যে বিকল্পগুলি যুক্ত করতে -oCiphers=arcfourএবং -oClearAllForwardings=yesজিনিসগুলিকে গতি বাড়িয়ে দিতে পছন্দ করতে পারেন , কারণ ইতিমধ্যে এনক্রিপ্ট হওয়া ট্র্যাফিকটি টানেল দেওয়ার সময় sshঅভ্যন্তরীণ মোড়ানো sshআরও বেশি ব্যয়বহুল এবং অতিরিক্ত প্রচেষ্টা এবং মোড়ককে সুরক্ষিত করার দরকার নেই।


যদি আপনি 5.3 এর আগে ওপেনএসএসএইচ ব্যবহার করেন তবে -Wবিকল্পটি উপলভ্য নয়। এই ক্ষেত্রে আপনি নেটক্যাট ( nc) ব্যবহার করে উপরেরটি প্রয়োগ করতে পারেন :

ProxyCommand ssh hostB nc %h %p  # or netcat or whatever you have on hostB

1
এটা অসাধারণ! ধন্যবাদ. এটি এমন একটি সমস্যার সমাধান করে যা আমাকে গত 2 দিন ধরে খাচ্ছে: হোস্টসি ফায়ারওয়ালের পিছনে বসে আছে এবং আমার কাছে এমন ডেটা রয়েছে যা আমি হোস্টএ, একটি ল্যাপটপ যা বিশ্বের যে কোনও জায়গায় হতে পারে from হোস্টবিসিও হোস্টসির সাথে একই ফায়ারওয়ালের পিছনে, তবে এটি একটি এসএসএইচ পোর্ট বিশ্বে উন্মুক্ত। সুতরাং আমি হোস্টসি -> হোস্টবি থেকে এসএসএস করতে পারি। আমি হোস্টসি এবং হোস্টবি-র মধ্যে একটি বিপরীত এসএসএইচ সুড়ঙ্গ সেটআপ করি, তাই আমি হোস্টবি -> হোস্টসি-এর (লোকালহোস্টের মাধ্যমে ফরোয়ার্ড) এসএসএসও করতে পারি। আপনার কৌশল দিয়ে আমি হোস্টএ -> হোস্টসি থেকে যেতে পারি! এটি ওএসএক্সের এসসিপি এবং ফুগুর সাথে নির্বিঘ্নে কাজ করে! ধন্যবাদ!
অ্যান্ডিল

-Wবিকল্প পরিবর্তে ব্যবহার করা উচিত ncবিকল্প।
vy32

কোন -Wএসএসএইচকে সমর্থন করা উচিত , কেবল হোস্টএতে একটি (উত্স) অথবা হোস্টবিতে একটি (মাঝের মেশিন)?
gioele

তথ্যের জন্য, যদি আপনার একাধিক হোস্ট থাকে তবে hostBএটির মাধ্যমে আপনাকে পৌঁছাতে হবে, Host hostCউপরের ProxyCommandসার্ভারের মাধ্যমে বেশ কয়েকটি হোস্টকে অ্যাক্সেস করা অত্যন্ত সহজ করে তুলতে উপরে একাধিক লাইন ঘোষণা করা সম্ভব ।
fduff

7

সম্পাদনা করুন: এটি ভুল পদ্ধতি। পরিবর্তে মুহুর্তের উত্তর দেখুন । এই উত্তরটি কার্যকর হবে, তবে সম্ভাব্যভাবে কম সুরক্ষিত এবং অবশ্যই কম অসাধারণ।

মনে হচ্ছে আপনি নীচের মত একটি সমাধান চান:

ssh -L localhost:22:machinec:22 machineb

এটি আপনাকে একটি শেল চালু করবে machineb। একা ছেড়ে দাও; টার্মিনাল উইন্ডোটি ছোট করুন।

এখন, আপনি যখনই কোনও এসএসএস সংযোগ করবেন localhost, আপনি আসলে এর machinecমাধ্যমে সংযুক্ত হবেন machineb। আপনি যখন টানেলটি সম্পন্ন করেছেন, কেবলমাত্র টার্মিনালটি বন্ধ করুন যেখানে আপনি উপরের কমান্ডটি চালিয়েছেন।

নোট করুন যে কমান্ডটি চালানোর জন্য আপনার কাছে অতিরিক্ত ব্যবহারকারীর সুবিধাগুলি প্রয়োজন।


+1 ধন্যবাদ ওয়েসলি। এটি আসল এসএস টানেলিং উত্তর। এটি সম্পর্কে একটি নিবন্ধ এখানে: নিরাপত্তা
ল্যারি কে

3
মোট কথা, এটি বেশ খারাপ ... তবে আমাকে ওপেনএসএসএইচ বা অন্যান্য এসএসএস ক্লায়েন্টগুলির প্রাচীন সংস্করণগুলি সহ এটি করতে হয়েছিল। আপনি 8022 এর মতো কিছু উচ্চ বন্দর বেছে নিতে পারেন: এইভাবে এটি লোকালহোস্টে কোনও ssh পরিষেবাটিতে হস্তক্ষেপ করে না এবং এটি রুট হিসাবে চালানোর প্রয়োজন হয় না। শুধু -p 8022আপনার ssh কমান্ড যুক্ত করুন। এবং এটি গিটের সাহায্যে ব্র্যান্ডিনড সহজ: ইউআরআই ব্যবহার করুন ssh://localhost:8022/path/to/repo.git
প্রশংসাপত্র

3

আপনার A এর মতো শেল ওরফে চাইলে এমন শব্দ লাগে যা সি-তে Ssh ঘটায়

  1. আমি ধরে নিলাম যে এ-তে আপনি ssh me @ b "ssh me @ c হোস্টনেম" টাইপ করতে পারেন এবং "সি" ফিরে পেতে পারেন
  2. একটি উপাধি এসএসসি করুন যা এসএসসি ফুকে প্রসারিত করে ssh me @ b "ssh me @ c foo"
  3. উপন্যাসটি তৈরির সঠিক বাক্য গঠনের জন্য, সুপারসার ডটকমের পরামর্শ নিন

1
আপনি -tযদি ইন্টারেক্টিভ শেল চান তবে আপনাকে বাইরের ssh এর বিকল্পগুলিতে যুক্ত করতে হতে পারে , যেহেতু sshধরে নেওয়া -Tহয় এটি কোনও কমান্ড দেওয়া হয়েছে কিনা।
প্রাক্তন

1

ইন্টারেক্টিভ শেলের জন্য আপনি এই সাধারণ কমান্ডটি ব্যবহার করতে পারেন:

ssh -J <user>@<hostB> <user>@<hostC>

-জে বিকল্পগুলি জাম্পের জন্য ।


0

যদি আপনার নিয়োগকর্তা একটি ভিপিএন সরবরাহ করেন তবে আমি পরিবর্তে এটি ব্যবহারের পরামর্শ দেব।

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


6
কখনও কখনও এটির ভিপিএন হ'ল কারণেই আমাদের এই কৌশলগুলি প্রয়োজন ...
লুই

0

YASS তবুও অন্য একটি সহজ সমাধান

ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
    ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
  • প্রথম কমান্ড হোস্টবিতে একটি এসএসএস সংযোগ খুলুন এবং হোস্টবিকে লোকালহোস্ট: 2222 থেকে হোস্টসি: 22 তে সংযোগ ফরোয়ার্ড করতে বলুন ।
  • -fপরামিতি পটভূমি যেতে, SSH তাকে বলো যখন সংযোগ স্থাপন
  • দ্বিতীয় কমান্ড লোকালহোস্টের সাথে কেবল একটি ক্লায়েন্ট সংযোগ খোলে : 2222
  • অপশন হোস্টকিএলিয়াসের প্রয়োজন হয় না তবে ভুল হোস্টের সংযোগ রোধ করতে সহায়তা করতে পারে
  • নোট: sleep 10দ্বিতীয় ssh কমান্ড ফরওয়ার্ড পোর্ট ব্যবহার না করা অবধি সংযোগ বজায় রাখতে কমান্ডের প্রয়োজন। তারপরে প্রথম এসএস বন্ধ হবে যখন দ্বিতীয় এসএস ফরোয়ার্ড করা বন্দর ছেড়ে যাবে

আপনি এখন পরবর্তী এসশ সেশন চালাতে পারেন:

ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost

ভেরিয়েন্ট:

ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
    ssh -M -S ~/.ssh/ssh_HostC22userOnC.sock -o HostKeyAlias=HostC -p 2222 userOnC@localhost

পরবর্তী ssh সেশনগুলি চালিয়ে খোলা হতে পারে:

ssh -S ~/.ssh/ssh_HostC22userOnC.sock userOnC@localhost

-এম এবং-এস প্যারাম ব্যবহারের প্রধান সুবিধাটি হ'ল হোস্টএ থেকে হোস্টসি তে কেবল একটি সংযোগ খোলা আছে, পরবর্তী সেশনটি আবার প্রমাণীকরণ করবে না এবং আরও দ্রুত চালাবে না।


0

বিশেষ কেস, মিশ্র নিক্স প্ল্যাটফর্মগুলি:

  হোস্টএ (লিনাক্স) -> হোস্টবি (সোলারিস) -> হোস্টসি (লিনাক্স)

হোস্টসি-তে যদি একটি এক্স অ্যাপ্লিকেশন প্রয়োজন হয়, এবং মধ্যবর্তী হপ সোলারিস বক্সে রয়েছে ... এই ক্ষেত্রে আমি প্রক্সিকম্যান্ডে নেটকাট (এনসি) এর মতো দেখতে পেয়েছি:

হোস্টএ: ~ $ vi .ssh / কনফিগারেশন:

হোস্ট হোস্টসি
    প্রক্সিকমন্ডের ssh হোস্টবি এনসি% এইচ% পি # যেখানে এনসি নেটকেট

তারপরে স্বয়ংক্রিয় টানেলিংয়ের কাজ:

হোস্টএ: sh sh এসএসএস হোস্টসি

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