জনসাধারণের জন্য কীভাবে এসএসএস টানেল উন্মুক্ত করবেন?


174

ঠিক আছে, এই প্রশ্নটির কথা উল্লেখ করে আমি কমান্ডটি চালাচ্ছি

ssh -R 8080:localhost:80 -N root@example.com

একটি ম্যাক উপর। তবুও যে বন্দরটি টানেল করা হচ্ছে তা প্রকাশ্যে কাজ করছে না। এটি তৈরির জন্য আমি এমন একটি কমান্ড চালাচ্ছি যাতে দূরবর্তী কম্পিউটারে লোকাল বন্দরটি খোলা যায়। দূরবর্তী কম্পিউটারে লোকালহোস্টে বন্দরটি খোলার সময় এটি কাজ করে তবে আমি যখন আমার স্থানীয় কম্পিউটার থেকে দূরবর্তী কম্পিউটারের পাবলিক আইপি ঠিকানাটি অ্যাক্সেস করার চেষ্টা করি তখন বন্দরটি খোলা মনে হয় না। কারও অ্যাক্সেসের জন্য আমি কীভাবে টানেলটি আইপিতে পাবলিক করব?

সম্পাদনা: দেখে মনে হচ্ছে দূরবর্তী দিকটি সমস্ত ইন্টারফেসের পরিবর্তে কেবল লোকালহোস্টে আবদ্ধ থাকে।

সম্পাদনা 2: ক্লায়েন্টটি ম্যাক ওএস এক্স 10.6 এবং সার্ভারটি লিনাক্স মিন্ট, তবে তারা উভয়ই ওপেনএসএসএইচ।


পাবলিক আইপি বলতে কী বোঝায়? আপনি যদি রাউটারের মাধ্যমে এবং ইন্টারনেটের মাধ্যমে কোনও স্থানীয় কম্পিউটারের সাথে সংযোগ স্থাপনের চেষ্টা করছেন, তবে বেশিরভাগ রাউটারগুলি এ জাতীয় লুপব্যাকের অনুমতি দেবে না।
harrymc

উত্তর:


350

আপনি যদি ssh- এর জন্য ম্যান পৃষ্ঠাটি পরীক্ষা করেন তবে আপনি খুঁজে পাবেন যে বাক্যগুলির বাক্য গঠন -R:

-আর [ বাইন্ড_এড্রেস :] পোর্ট : হোস্ট : হোস্টপোর্ট

যখন bind_addressবাদ দেওয়া হয় (যেমন আপনার উদাহরণ হিসাবে), পোর্টটি কেবল লুপব্যাক ইন্টারফেসে আবদ্ধ। এটি সমস্ত ইন্টারফেসের সাথে আবদ্ধ করার জন্য, ব্যবহার করুন

ssh -R \*:8080:localhost:80 -N root@example.com

অথবা

ssh -R 0.0.0.0:8080:localhost:80 -N root@example.com

অথবা

ssh -R "[::]:8080:localhost:80" -N root@example.com

প্রথম সংস্করণ পৃথকভাবে সমস্ত ইন্টারফেসের সাথে আবদ্ধ। দ্বিতীয় সংস্করণটি একটি সাধারণ আইপিভি 4-কেবল বাইন্ড তৈরি করে, যার অর্থ পোর্টটি আইপিভি 4 এর মাধ্যমে সমস্ত ইন্টারফেসে অ্যাক্সেসযোগ্য। তৃতীয় সংস্করণটি সম্ভবত প্রযুক্তিগতভাবে প্রথমটির সমতুল্য, তবে আবার এটি কেবল একটি একক বাঁধন তৈরি করে ::যার অর্থ পোর্টটি আইপিভি 6 এর মাধ্যমে এবং আইপিভি 4 এর মাধ্যমে আইপিভি 4-ম্যাপযুক্ত আইপিভি 6 ঠিকানাগুলির মাধ্যমে অ্যাক্সেসযোগ্য (উইন্ডোজ, ওপেনবিএসডি তে কাজ করে না) । (আপনার উদ্ধৃতিগুলি দরকার কারণ [::]অন্যথায় গ্লোব হিসাবে ব্যাখ্যা করা যেতে পারে))

মনে রাখবেন যে, যদি আপনি OpenSSH- র ব্যবহার sshdসার্ভার, সার্ভারের GatewayPortsবিকল্প সক্ষম করা প্রয়োজন (সেট yesবা clientspecified(ফাইল চেক করুন) এই কাজ করার জন্য /etc/ssh/sshd_configসার্ভারে)। অন্যথায় (এই বিকল্পের জন্য ডিফল্ট মান হ'ল no), সার্ভার সর্বদা পোর্টটিকে কেবল লুপব্যাক ইন্টারফেসে আবদ্ধ করতে বাধ্য করবে।


12
ওহ আমার ITশ্বর এটি কাজ করেছেন !!!!! আমি ঠিক 1 মিলিয়ন বার করেছি! আমি কেবল ভুলে গেছি যে *ব্যাশে ফাইল দেবে এবং আমার প্রয়োজন হবে\*
ট্রেভর রুডলফ

4
হ্যাঁ, এ কারণেই আমি সবসময় পছন্দ করি 0.0.0.0- এটি কেবল আইপিভি 4 তবে এটি বেশিরভাগ সময়ই করবে :)
স্টিফান সিডেল

34
গেটওয়েপোর্টস হ্যাঁ আমার সমস্যার সমাধান করেছে।
সানারি

4
গেটওয়েপোর্টস = হ্যাঁ (রিমোট
এসএসডি

3
"গেটওয়েপোর্টস হ্যাঁ" আমার দিনটি তৈরি করেছে, ধন্যবাদ @ স্টিফ্যানসিডেল
কার্সার

37

সম্পাদনা:

-g স্থানীয় ফরোয়ার্ড করা বন্দরগুলির জন্য কাজ করে তবে আপনি যা চান তা একটি বিপরীত / দূরবর্তী ফরোয়ার্ড পোর্ট, যা ভিন্ন।

আপনি যা চান এটি এই

মূলত, চালু example.comকরা GatewayPorts=clientspecifiedহয়েছে /etc/ssh/sshd_config

--- পূর্ববর্তী (ভুল) উত্তর ---

-G বিকল্পটি ব্যবহার করুন। Ssh এর ম্যান পেজ থেকে:

-g     Allows remote hosts to connect to local forwarded ports.

কাজ করছে বলে মনে হচ্ছে না ... এটি শুরু হয় তবে আমি দূর থেকে সংযোগ করতে পারি না
ট্রেভর রুডলফ

2
netstat -elnptকোন ঠিকানায় কোন বন্দর আবদ্ধ তা নির্ধারণ করার জন্য পৃথক tty থেকে চালানোর চেষ্টা করুন । ছাড়া -g, একটি বন্দরের সাথে আবদ্ধ হওয়া উচিত 127.0.0.1:PORT। এর সাথে -gএটি আবদ্ধ হওয়া উচিত 0.0.0.0:PORT, যা এটি দূর থেকে অ্যাক্সেসযোগ্য করে তোলে।
স্ন্যাপশো


2
GatewayPorts=clientspecifiedবাGatewayPorts clientspecified
ট্রেভর রুডল্ফ

এবং আমি এটি ক্লায়েন্টে বা দূরবর্তীটিতে যুক্ত করব?
ট্রেভর রুডল্ফ

14

সমাপ্তির জন্য আমার উত্তর এখানে:

আমি ssh -R ...টানেলিং ব্যবহার socatকরে এবং এর উপরে নেটওয়ার্ক ট্র্যাফিক পুনঃনির্দেশের জন্য ব্যবহার করে শেষ করেছি 127.0.0.1:

টানেলটি 127.0.0.1 এ আবদ্ধ: ssh -R mitm:9999:<my.ip>:8084 me@mitm

socat: mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999

অন্য বিকল্পটি হ'ল এর উপরে স্থানীয়-কেবল একটি সুড়ঙ্গ করা, তবে আমি এটি খুব ধীর পাই

mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost


আমি এই সত্যটি পছন্দ করি যে আমাকে এসএসডি কনফিগারেশনের সাথে ডিল করতে হবে না এবং এটি সুডো ছাড়াই আমি সব করতে পারি। এছাড়াও আমি শিখি যে সকেট বিদ্যমান। ধন্যবাদ!
ব্রুটাসকাট

+ আপ আপনি ভাল যান স্যার। আমি ssh কে সাফল্য ছাড়াই 0.0.0.0 এ বাঁধতে বলার চেষ্টা করেছি .. তারপরে * সিনট্যাক্সটি দেখেছি, চেষ্টা করেছি, কোনও পাশা নেই। আমি কল্পনা করি এটি এসএসডিডি কনফিগারেশনের কোনও ধরণের সুরক্ষা বৈশিষ্ট্য বা এমন কিছু যা এটির অনুমতি দিচ্ছে না। অবশেষে এই পোস্টটি দেখে এবং socatদুর্দান্ত কাজ করেছে । এটিকে আমার পিছনের পকেটে রাখার জন্য দরকারী;]
জাইমে

10

আপনি যদি ডাবল ফরোয়ার্ড ব্যবহার করতে পারেন বা / etc / ssh / sshd_config পরিবর্তন করতে পারেন তবে আপনিও ডাবল ফরোয়ার্ড ব্যবহার করতে পারেন।

প্রথমে রিমোট মেশিনে লুপব্যাক ডিভাইসে অস্থায়ী পোর্টে (উদাহরণস্বরূপ 10080) এগিয়ে যান, তারপরে সমস্ত ইন্টারফেসে পোর্ট 10080 থেকে 80 কে পুনর্নির্দেশের জন্য সেখানে স্থানীয় ফরোয়ার্ড ব্যবহার করুন:

ssh -A -R 10080:localhost_or_machine_from:80 user@remote.tld "ssh -g -N -L 80:localhost:10080 localhost"

1
এটি আসলে ফরোয়ার্ডিং বিধিগুলিকে বাইপাস করতে কাজ করে!
মাইকেল শুবার্ট

এই সমাধান ভালবাসা। আপনি যখন মেশিনে
কনফিগারটি

8

"গেটওয়ে পোর্ট" বিকল্পটি ব্যবহার করুন।

ssh -g -R REMOTE_PORT:HOST:PORT ...

এটি ব্যবহার করার জন্য, আপনাকে সম্ভবত GatewayPorts yesআপনার সার্ভারের " " যুক্ত করতে হবে /etc/ssh/sshd_config


আসলে এই কাজ। আমি যা করি তা হ'ল আমি আমার REST সার্ভারের ফরওয়ার্ডার হিসাবে একটি ইসি 2 উদাহরণ ব্যবহার করি। এইভাবে, আমার ডিএমজেডে আমার সার্ভারটি আটকে রাখার দরকার নেই এবং আমার কোনও পাবলিক আইপি লাগবে না। যথেষ্ট মজার, আমি তৈরি প্রথম ইসি 2 উদাহরণ সহ, এসএসএস-আর রিমোট_পোর্ট: লোকালহোস্ট: পোর্ট এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স পরে কোনও কারণের জন্য পরে আমাকে আরও একটি উদাহরণ তৈরি করতে হয়েছিল এবং সেদিক থেকে, আমি সর্বদা পেয়ে যাচ্ছিলাম: সংযোগ অস্বীকার করেন। আমি কী পাচ্ছি তা দেখার জন্য tcpdump ব্যবহৃত হয়েছিল এবং খুব বেশি তথ্য নেই। -জি প্লাস গেটওয়েপোর্টস হ্যাঁ কৌশলটি করেছে।
ইটি

1

ওপেনএসএইচ-তে সাম্প্রতিকতম সংযোজন হ'ল জাম্প হোস্ট । এর জন্য মধ্যবর্তী স্থানে এসএসএইচ অ্যাক্সেস প্রয়োজন, তবে অতিরিক্ত কনফিগারেশন ছাড়াই কাজ করা উচিত।

ssh -J root@example.com remoteuser@localhost -p 8080

এই কমান্ডটি এসএসএইচকে প্রথমে সংযুক্ত হওয়ার জন্য নির্দেশ দেয় root@example.comএবং তারপরে, সেই মেশিন থেকে, ব্যবহারকারীর নাম localhostঅনুসারে 8080 পোর্টে (যেমন, জাম্প হোস্ট থেকে দূরবর্তী হোস্টে টানেলযুক্ত পোর্ট) সংযোগ শুরু করতে initremoteuser


0

আপনি যদি ~/.ssh/configকমান্ড লাইন প্যারামিটার ব্যবহার না করে কনফিগারেশনটি আপনার মধ্যে রাখতে চান তবে আপনি এর মতো কিছু চেষ্টা করতে পারেন

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

মনে রাখবেন যে আপনার দূরবর্তী হোস্টের ফায়ারওয়ালটি 8080 এ সংযোগের অনুমতি দেয় এবং GatewayPortsআপনার /etc/ssh/sshdকনফিগারেশনের বিকল্পটি সেট না হয়ে থাকে তা নিশ্চিত করুনno

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