თქვენი მოწყობილობა ოპერატორის NAT-ის უკანაა, მას შეუძლია გამავალი კავშირების გახსნა და უშვებს SSH სერვერს, რომელსაც ვერავინ მიაღწევს. მომავალი მოთხოვნა ჩვეულებრივ ფორმულირდება როგორც "მიეცი მას VPN", რაც ერთი პასუხია რამდენიმედან. სანამ მიიღებთ, გადაწყვიტეთ, გჭირდებათ ერთი ადმინისტრაციული TCP პორტი თუ მარშრუტიზებული გზა მთელ ქვექსელამდე, რადგან ეს სხვადასხვა პროექტია სხვადასხვა ექსპოზიციით.

უკუღმა გვირაბი კარგად პასუხობს ვიწრო ვერსიას. მოწყობილობა უკავშირდება თქვენს კვანძს, სთხოვს კვანძს loopback პორტზე მოსმენას და ამ პორტს უკან თავისივე SSH სერვისზე გადაამისამართებს. შემდეგ ადმინისტრატორები მსმენელს აღწევენ კვანძის გავლით და არა საჯარო ინტერნეტის გავლით.

სამი პირობა, რომელიც წყვეტს არჩევანს

ჩაწერეთ ისინი ნებისმიერ კონფიგურაციამდე. ისინი საზღვარია შეზღუდულ ადმინისტრაციულ შესასვლელსა და ქსელის გაფართოებას შორის, და მათი არევა არის გზა, რომლითაც ხუთსტრიქონიანი გვირაბი უპატრონო ბრტყელ ქსელად იქცევა.

ConditionReverse tunnel fitsSomething else is needed
How many services must be reachable?One, or a small fixed set on loopbackAnything that needs many ports or dynamic discovery
Who connects, and how are they authenticated?Named administrators with their own hub accountsThird parties, or anything needing per-flow audit you do not control
Does the device's own LAN need to be reachable?NoYes, so a routed VPN or a managed platform is the honest answer

მესამე სტრიქონია ის, რაზეც ადამიანები კამათობენ. მოწყობილობის SSH პორტამდე გვირაბი მის მეზობლებს თქვენს ქსელში არ აყენებს და არ უნდა შეიქმნას შთაბეჭდილება, თითქოს ამას აკეთებს შემდგომი გადამისამართებების ჯაჭვით. თუ მოთხოვნა ნამდვილად LAN-ია, თქვით ეს და დააპროექტეთ სწორედ ის.

კვანძის მხარე: შეზღუდული სარელეო ანგარიში

მიეცით თითოეულ მოწყობილობას საკუთარი სარელეო ანგარიში საჯარო გასაღებით ავთენტიფიკაციით და ინტერაქტიული სესიის გარეშე. Match ბლოკი, რომელიც ამ ანგარიშზეა შეზღუდული, ნებართვას მცირედ ინახავს, ხოლო კერძო გასაღები რჩება მოწყობილობაზე, სადაც მისი ადგილია.

Match User relay-dev-7
    AuthenticationMethods publickey
    PubkeyAuthentication yes
    AllowTcpForwarding remote
    PermitListen 127.0.0.1:21022
    GatewayPorts no
    MaxSessions 0
    PermitTTY no
    X11Forwarding no
    AllowAgentForwarding no

MaxSessions 0 საინტერესო სტრიქონია. ის უარყოფს shell და ქვესისტემების სესიებს და ამავდროულად ნებას რთავს მოწყობილობისთვის საჭირო გადამისამართებას, ამიტომ მოპარული გასაღები ინტერაქტიულ შესვლად ვერ გადაიქცევა. PermitListen ამაგრებს კვანძის მხარეს მსმენელის მისამართსა და პორტს, და GatewayPorts no ინახავს მას loopback-ზე და არ ხსნის იმ ქსელისთვის, რომელზეც კვანძია.

შეამოწმეთ ეფექტური კონფიგურაცია გადატვირთვამდე და ამ დროს მეორე სესია ღიად გქონდეთ. Match ბლოკი, რომელიც შემთხვევით ყველაზე მოქმედებს, ან ბეჭდვითი შეცდომა პარამეტრის სახელში, კლასიკური გზაა იმ აპარატიდან თავი ჩაკეტოთ, რომელსაც ამყარებთ. გამოიტანეთ მიმდინარე კონფიგურაცია და ხელახლა წაიკითხეთ პარამეტრები, ნაცვლად იმისა, რომ ახლახან დაწერილ ფაილს ენდოთ. გაითვალისწინეთ, რომ პარამეტრების მხარდაჭერა განსხვავდება ვერსიებს შორის, ამიტომ ახალ სერვერზე მიღებული სტრიქონი ძველმა შეიძლება უბრალოდ უგულებელყოს.

მოწყობილობის მხარე: გადამისამართება, რომელიც ხმამაღლა ვარდება

მოწყობილობა ხსნის კავშირს და ითხოვს მსმენელს. არგუმენტში ორი მისამართი -R სხვადასხვას ნიშნავს და მათი მარცხნიდან მარჯვნივ კითხვა ყველაზე სწრაფი გზაა დაიმახსოვროთ, რომელი რომელია.

ssh -NT \
    -o ExitOnForwardFailure=yes \
    -o ServerAliveInterval=30 \
    -o ServerAliveCountMax=3 \
    -R 127.0.0.1:21022:127.0.0.1:22 \
    [email protected]

მარცხენა წყვილი არის ის ადგილი, სადაც კვანძმა უნდა მოისმინოს. მარჯვენა წყვილი არის ის, რასთანაც მოწყობილობა უკავშირდება მოთხოვნის მოსვლისას, ამოხსნილი თავად მოწყობილობის მხრიდან. მათი შეცვლა ქმნის გვირაბს, რომელიც სუფთად ადის და არასწორ ადგილას გადაამისამართებს, რაც უარესია მარცხზე.

ExitOnForwardFailure=yes აიძულებს ბრძანებას გავიდეს, როცა მოთხოვნილი მსმენელის დაყენება შეუძლებელია, ამიტომ გადატვირთვის ციკლი სიმართლეს გეუბნებათ, ნახევრად მომუშავე სესიის დატოვების ნაცვლად. ის არაფერს ამბობს იმაზე, ჯანსაღია თუ არა ლოკალური SSH სერვისი შემდგომში, ამიტომ დააწყვილეთ პროცესების მენეჯერთან და დროდადრო რეალური კავშირის ტესტთან.

არასოდეს შეცვალოთ loopback მოსმენის მისამართი ველური ბარათით დამატებითი ნახტომის თავიდან ასაცილებლად. ეს ერთი ცვლილებაა განსხვავება მართვის გზასა და საჯაროდ მისაწვდომ პორტს შორის, და ეს ჩვეულებრივ ხდება გამართვის დროს და შემდეგ რჩება. თუ კოლეგა ვერ აღწევს პორტს კვანძის გავლით, გაასწორეთ ნახტომის კონფიგურაცია და არ გააფართოვოთ მიბმა. Loopback ამ დიზაინის მთელი უსაფრთხოების არგუმენტია.

ადმინისტრატორის წვდომა კვანძის გავლით

კვანძზე ჩვეულებრივი ანგარიშის მქონე ადმინისტრატორს შეუძლია მის გავლით გადახტეს გადამისამართებულ პორტზე. სარელეო ანგარიში ამისთვის არ გამოიყენება და სწორედ ეს არის მათი განცალკევებით შენახვის აზრი.

ssh -J [email protected] -o HostKeyAlias=device-7 \
    -p 21022 [email protected]

შეამოწმეთ მოწყობილობის ჰოსტის გასაღები თქვენ მიერ არჩეული ფსევდონიმის ქვეშ, რადგან ის გასაღები ჯაჭვის ბოლოში მოწყობილობას იდენტიფიცირებს და გვირაბი მხოლოდ ტრანსპორტია. ბოლოდან ბოლომდე შესვლა კვლავ ავთენტიფიცირებს ორივე ბოლოს; საერთო კვანძზე დამთავრებული გვირაბი თავისთავად სანდო გზად არ აქცევს.

აიღეთ სასიცოცხლო ციკლის საკუთრება

გაუშვით მოწყობილობის ბრძანება პროცესების მენეჯერის ქვეშ ზუსტად ერთი აქტიური ეგზემპლარით და განზრახ არჩეული გადატვირთვის პოლიტიკით. keepalive პარამეტრები აღმოაჩენს მკვდარ პარტნიორს; ისინი არ აცოცხლებს გასულ პროცესს.

შემდეგ დაწერეთ ექსპლუატაციიდან გამოყვანის პროცედურა. თითოეული მოწყობილობა იღებს საკუთარ მსმენელს და საკუთარ გასაღებს, ამიტომ დემონტაჟი ნიშნავს ამ ანგარიშის გაუქმებას და ამ გასაღების წაშლას და არა მთელი ფლოტის საერთო საიდუმლოს ბრუნვას.

და ბოლოს, გაიხსენეთ რას გაძლევთ loopback. ის ზღუდავს ქსელურ ექსპოზიციას და არაფერს აკეთებს საერთო კვანძის სხვა ლოკალურ მომხმარებლებთან დაკავშირებით, ამიტომ თავად კვანძის წვდომის პოლიტიკა მაინც სწორი უნდა იყოს. sshd_config-ის ცნობარი აღწერს ზემოთ გამოყენებულ თითოეულ პარამეტრს და ღირს გადამისამართების თავები სრულად წაიკითხოთ, სანამ რომელიმეს გააფართოებთ.

დაკავშირებული სტატიები