უკან დაბრუნება
SSH გვირაბები: ლოკალური და დისტანციური პორტების გადამისამართება
SiTech AI Team2 წთ. საკითხავი

SSH გვირაბები: ლოკალური და დისტანციური პორტების გადამისამართება

iximiuz Labs-ის პრაქტიკული გზამკვლევი SSH გვირაბებზე: როგორ აღწევს ლოკალური გადამისამართება (-L) ბასტიონის მიღმა მდებარე სერვისებამდე, როგორ ამჟღავნებს -R ლოკალურ სერვისს და როგორ აქცევს -D SSH-კლიენტს SOCKS პროქსიდ.

SSH ძველი ტექნოლოგიაა, რომელიც არ აპირებს გაქრობას, და მისი გვირაბები დღემდე ერთი ბრძანებით აკეთებს იმას, რასაც უამრავი ახალი ინსტრუმენტი ძლივს ახერხებს: შიდა VPC-ის სერვისამდე მისვლა საჯარო ბასტიონის გავლით, დისტანციური დეველოპმენტის VM-ის localhost-პორტის ბრაუზერში გახსნა ან ლოკალური სერვერის გარე სამყაროსთვის გამჟღავნება. ივან ველიჩკოს პრაქტიკული გზამკვლევი iximiuz Labs-ზე ხსნის ლოკალურ, დისტანციურ და დინამიკურ გადამისამართებას — ლაბორატორიები ოთხი ჰოსტისა და სამი ქსელის პოლიგონზე მუშაობს.

ლოკალური პორტის გადამისამართება

-L დროშა გადამისამართებას კლიენტის მხარეს იწყებს: SSH-კლიენტი უსმენს ლოკალურ პორტს და მასზე მოსული ტრაფიკი გადადის remote_addr:remote_port-ზე, იმ მანქანიდან დანახული, რომელშიც შეხვედით. სინტაქსია ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr, ხოლო ssh -f -N -L სესიას ფონურ რეჟიმში ამუშავებს. პირველ ლაბში დისტანციური ჰოსტის 127.0.0.1:80-ზე მიბმული ვებ-სერვერი ქსელიდან მიუწვდომელია; ssh -f -N -L 8080:localhost:80 203.0.113.30-ის შემდეგ იგივე გვერდი ლოკალურ 8080 პორტზე პასუხობს.

ბრძანებას სხვა მანქანაზეც შეუძლია გადამისამართება, არა მხოლოდ SSH-სერვერზე. ssh -L 8081:172.16.0.40:80 203.0.113.30-ში ბასტიონი იღებს კავშირს და ჩვენი სახელით ხსნის მეორე ნაბიჯს კერძო VPC-ის ჰოსტამდე. მხოლოდ loopback-ზე მიბმული პორტები დამატებით ხერხს მოითხოვს, რადგან გადამისამართებას ბასტიონი წყვეტს და ვერ ხედავს სამიზნის 127.0.0.1-ს. -J დროშა ბასტიონის გავლით „ხტუნავს“ და სესიას სამიზნეზე ამთავრებს: ssh -f -N -J 203.0.113.30 -L 8082:localhost:9000 172.16.0.40 ქსელისთვის უხილავ დებაგ-პორტს ლოკალურად აჩენს.

დისტანციური პორტის გადამისამართება

საპირისპირო შემთხვევა — ლოკალური სერვისის საჯარო კარიბჭის გავლით გამჟღავნება — იყენებს ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr-ს, სადაც დამატებით პორტს sshd-სერვერი ხსნის. ხაფანგი: ნაგულისხმევად გვირაბი მხოლოდ კარიბჭის localhost-ს უკავშირდება, ამიტომ სერვისი მხოლოდ კარიბჭის შიგნიდანაა ხელმისაწვდომი; ყველა ინტერფეისზე გამოსაქვეყნებლად sshd_config-ში საჭიროა GatewayPorts yes. ამ პარამეტრით ssh -f -N -R 0.0.0.0:8080:localhost:80 203.0.113.30 ლეპტოპის მხოლოდ-localhost ვებ-სერვერს ქსელისთვის აქვეყნებს. ვარიანტი საშუალებას იძლევა, SSH-კლიენტი თავად გახდეს გამტარი და გამოაჩინოს შინაური ქსელის მოწყობილობა, რომელსაც თავად კარიბჭე ვერ აღწევს.

დინამიკური გადამისამართება: SSH როგორც SOCKS პროქსი

ერთი ლოკალური პორტის ერთ სამიზნეზე მიბმის ნაცვლად, ssh -D [local_addr:]local_port SSH-კლიენტს ლოკალურ SOCKS პროქსიდ აქცევს. თითოეული კავშირი თავად ასახელებს სამიზნეს და მას SSH-სერვერი წყვეტს, ამიტომ ერთი პროქსირებული პორტი აღწევს ბასტიონის მიღმა არსებულ ყველა ჰოსტსა და პორტს: საკმარისია curl --socks5-hostname localhost:1080 172.16.0.40:80, თუ კლიენტს SOCKS ესმის. -R-დან სამიზნის მოშორება იგივეს სარკისებურად აკეთებს სერვერის მხარეს და sshd-ს თავად აქცევს SOCKS პროქსიდ; ამ რეჟიმს კლიენტზე OpenSSH 7.6 ან უფრო ახალი სჭირდება.

როგორ დავიმახსოვროთ დროშები

ველიჩკოს შეჯამება მოკლეა: -L დისტანციურ სერვისს ლოკალურ პორტზე ამჟღავნებს, -R ლოკალურ სერვისს დისტანციურ პორტზე, -D ლოკალური SOCKS პროქსია, ხოლო -R სამიზნის გარეშე — პროქსი სერვერზე. მნემონიკაა ssh -L local:remote და ssh -R remote:local — ახალ პორტს ყოველთვის მარცხენა მხარე ხსნის.

SSiTech

SiTech — AI-გაძლიერებული ვებ დეველოპმენტი

ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.