سؤال كيف تجعل نفق ssh مفتوح للجمهور؟


حسنا ، في اشارة الى هذه السؤال ، أنا أدير الأمر

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

على جهاز Mac. ومع ذلك ، فإن الميناء الذي يتم حفره في الأنفاق لا يعمل بشكل علني. أنا أدير هذا الأمر لجعله بحيث يمكن فتح المنفذ المحلي على الكمبيوتر البعيد. وهو يعمل عند فتح المنفذ على مضيف محلي على الكمبيوتر البعيد ، ولكن عندما أحاول الوصول إلى عنوان IP العام للكمبيوتر البعيد من الكمبيوتر المحلي ، يبدو أن المنفذ مفتوح. كيف يمكنني جعل النفق عامًا على IP لكي يتمكن أي شخص من الوصول إليه؟

تحرير: يبدو كما لو أن الجانب البعيد يربط فقط على المضيف المحلي بدلاً من كل الواجهات.

EDIT 2: العميل هو Mac OS X 10.6 والخادم هو Linux Mint ، لكنهما على حد سواء OpenSSH.


140
2018-04-27 22:14


الأصل


ماذا يعني IP العام؟ إذا كنت تحاول الاتصال بجهاز كمبيوتر محلي عبر جهاز التوجيه وعبر الإنترنت ، فلن تسمح معظم أجهزة التوجيه بهذا الاسترجاع. - harrymc


الأجوبة:


إذا قمت بفحص صفحة man for ssh ، ستجد أن بناء الجملة لـ -R فيما يلي نصها:

-R [bind_address:]ميناء:مضيف:استضافة الميناء

متى 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

النسخة الأولى ترتبط بكل الواجهات بشكل فردي. يقوم الإصدار الثاني بإنشاء ربط IPv4 فقط ، مما يعني أنه يمكن الوصول إلى المنفذ على كافة الواجهات عبر IPv4. ربما يكون الإصدار الثالث مكافئًا تقنيًا للأول ، ولكن مرة أخرى ينشئ فقط رابطًا واحدًا ::مما يعني أنه يمكن الوصول إلى المنفذ عبر IPv6 أصلاً وعبر IPv4 خلال عناوين IPv4 المعينة IPv6 (لا يعمل على Windows ، OpenBSD). (أنت في حاجة إلى اقتباسات لأن [::] يمكن تفسيره على أنه كرة أرضية.)

لاحظ أن إذا كنت تستخدم OpenSSH sshd الخادم ، الخادم GatewayPorts يحتاج الخيار إلى تمكين (ضبط ل yes أو clientspecified) لهذا العمل (تحقق من الملف /etc/ssh/sshd_config على الخادم). على خلاف ذلك (القيمة الافتراضية لهذا الخيار هي no) ، سيعمل الخادم دائمًا على فرض تقييد المنفذ على واجهة الاسترجاع فقط.


290
2018-05-06 06:11



يا الهي الله يعمل !!! لقد فعلت بالضبط أن 1 مليون مرة !! لقد نسيت ذلك * في باش سيمنحكم الملفات و احتاجها \* - Trevor Rudolph
نعم ، هذا هو السبب في أنني أفضل ذلك دائمًا 0.0.0.0 - إنها IPv4 فقط ، ولكنها ستفعل معظم الوقت :) - Stefan Seidel
GatewayPorts نعم حل مشكلتي. - Sunry
GatewayPorts = نعم (على التكوين sshd عن بعد) إصلاحه بالنسبة لي أيضا - Phil_1984_
جعلت "GatewayPorts نعم" يومي ، وذلك بفضلStefanSeidel - karser


تصحيح:

-g يعمل من أجل المنافذ المعاد توجيهها محليًا ، ولكن ما تريده هو منفذ إعادة التوجيه عن بُعد / عن بُعد ، وهو أمر مختلف.

ما تريده هو هذه.

أساسا ، في example.com، جلس GatewayPorts=clientspecified في /etc/ssh/sshd_config.

--- سابقة (غير صحيحة) جواب ---

استخدم الخيار -g. من صفحة ssh's man:

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

34
2018-04-28 03:34



لا يبدو أن يعمل ... يبدأ ولكن لا أستطيع الاتصال عن بعد - Trevor Rudolph
حاول الجري netstat -elnpt من tty منفصل لمعرفة ما هي المنافذ المرتبطة بأي عنوان. بدون -g، يجب أن تكون ملزمة الميناء 127.0.0.1:PORT. مع -g، يجب أن تكون ملزمة ل 0.0.0.0:PORT، مما يجعل الوصول إليها عن بعد. - snapshoe
pastebin.com/q6f4kJyd - Trevor Rudolph
GatewayPorts=clientspecified أو GatewayPorts clientspecified - Trevor Rudolph
وأضيف ذلك إلى العميل أو بعيد؟ - Trevor Rudolph


وهنا جوابي للانتهاء:

انتهى بي الأمر باستخدام 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


10
2017-10-29 12:09



أنا أحب حقيقة أنني لست مضطرا للتعامل مع تكوين sshd وأنني يمكن أن تفعل كل ذلك دون sudo. بالإضافة إلى أنني أتعلم أن soca موجود. شكر! - BrutusCat


استخدم خيار "منافذ البوابة".

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

لاستخدام هذا ، ربما تحتاج إلى إضافة "GatewayPorts yes"إلى خادمك /etc/ssh/sshd_config.


8
2018-04-28 13:58



في الواقع هذا عملت. ما أفعله هو أنني أستخدم مثيل EC2 كمعيد إلى خادم REST الخاص بي. بهذه الطريقة ، لا أحتاج إلى لصق الخادم الخاص بي في المنطقة المجردة من السلاح ، ولا أحتاج إلى عنوان IP عام. مضحك بما فيه الكفاية ، مع أول حالة EC2 أنا خلقت ، ssh -R remote_port: localhost: المنفذ xxx @ ec2xxx عملت على ما يرام ولكن بعد ذلك كان علي إنشاء مثيل آخر في وقت لاحق لسبب ما ومن تلك النقطة ، كنت أتلقى دائما: اتصال رفض. استخدم tcpdump للنظر في ما كنت أحصل عليه ولم يكن هناك الكثير من المعلومات. -g plus GatewayPorts نعم فعل الخدعة. - E.T


يمكنك أيضا استخدام مزدوجة إلى الأمام إذا كنت لن تستطيع تغيير / etc / ssh / sshd_config.

أولاً إلى الأمام إلى المنفذ المؤقت (على سبيل المثال ، 10080) على جهاز الاسترجاع على الجهاز البعيد ، ثم استخدم local forward هناك لإعادة توجيه المنفذ 10080 إلى 80 على جميع الواجهات:

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

8
2017-08-01 22:37



هذا في الواقع يعمل على تجاوز قواعد إعادة التوجيه! - Michael Schubert
أحب هذا الحل. حل رائع عندما لا تريد تغيير التكوين على الجهاز - Grezzo


إذا كنت ترغب في وضع التكوين فيك ~/.ssh/config بدلاً من استخدام معلمات سطر الأوامر ، يمكنك تجربة شيء من هذا القبيل

Host REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80

تذكر أن يكون لديك جدار حماية المضيف البعيد السماح بالاتصالات إلى 8080 وضمان أن GatewayPorts الخيار الخاص بك /etc/ssh/sshd لم يتم تعيين التكوين ل no


0
2017-08-26 15:50