Վերադառնալ
SSH թունելների գործնական ուղեցույց. տեղական և հեռավոր պորտերի փոխանցում
SiTech AI Team3 წთ. საკითხავი

SSH թունելների գործնական ուղեցույց. տեղական և հեռավոր պորտերի փոխանցում

Գործնական ուղեցույց SSH թունելների մասին iximiuz Labs-ից. ինչպես է -L տեղական փոխանցումը հասնում bastion-ի հետևի ծառայություններին, ինչպես է -R-ը բացում տեղական ծառայությունը դուրս և ինչպես է -D-ն SSH-հաճախորդը դարձնում SOCKS պրոքսի։

SSH-ը հին տեխնոլոգիա է, որը չի պատրաստվում անհետանալ, և նրա թունելները մինչ օրս մեկ հրամանով անում են այն, ինչին նոր գործիքները դժվարությամբ են հասնում. հասնել ներքին VPC ծառայությանը հանրային bastion-ի միջով, բացել հեռավոր զարգացման 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-ում bastion-ը ընդունում է կապը և մեր անունից բացում երկրորդ թռիչքը դեպի մասնավոր VPC հոսթը։ Միայն loopback-ին կապված պորտերը լրացուցիչ հնարքի կարիք ունեն, քանի որ փոխանցումը լուծում է bastion-ը և չի տեսնում թիրախի 127.0.0.1-ը։ -J դրոշը «ցատկում է» bastion-ի միջով և սեսիան ավարտում թիրախի վրա. 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-հաճախորդին դառնալ jump host և բացել տնային ցանցի սարք, որին դարպասն ինքը չի հասնում։

Դինամիկ փոխանցում. SSH-ը որպես SOCKS պրոքսի

Մեկ տեղական պորտը մեկ թիրախին կապելու փոխարեն ssh -D [local_addr:]local_port-ը SSH-հաճախորդին դարձնում է տեղական SOCKS պրոքսի։ Յուրաքանչյուր կապ ինքն է նշում իր թիրախը, և այն լուծում է SSH սերվերը, ուստի մեկ պրոքսիացված պորտ հասնում է bastion-ի հետևում գտնվող բոլոր հոսթերին ու պորտերին. բավական է 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-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։