Mae SSH cyhoeddus trwy gyfryngydd yn methu ar ddwy ffin nad ydynt yn gysylltiedig, ac mae trwsio'r naill fel arfer yn datgelu'r llall. Naill ai mae'r ymyl yn dychwelyd ateb HTTP yn lle cludo ffrwd, neu mae'r cyfryngydd yn rhagosod pennawd nad yw'r cefn wedi cytuno i'w ddarllen. Mae tair amod yn penderfynu pa un ohonynt yr ydych yn edrych arno: at beth mae'r cofnod cyhoeddus yn cyfeirio mewn gwirionedd, beth mae'r bloc ffrwd yn ei anfon i fyny, a pha enw mae'r cleient SSH yn ei wirio. Gweithiwch nhw yn y drefn honno.

Dwy ffin, dau symptom

Mae methiant ar yr ymyl yn edrych fel tudalen statws HTTP yn cyrraedd lle dylai baner SSH fod. Mae'r cysylltiad yn cwblhau ar lefel TCP a'r bytau cyntaf yn destun sy'n perthyn i weinydd gwe. Camgyfatebiaeth protocol yw hyn, nid pecyn a gollwyd. Mae hefyd yn dweud wrthych fod yr ymyl yn gweini rhywbeth arall yn fwriadol ar gyfer yr enw hwnnw.

Mae methiant ar yr ochr uchaf yn edrych yn wahanol. Mae'r cysylltiad yn cyrraedd sshd, mae sshd yn darllen bytau nad ydynt y gyfnewidfa adnabod y mae'n ei disgwyl, ac mae'r sesiwn yn marw neu'n hongian heb gynnig allwedd erioed.

Mae'r ddau yn hawdd eu drysu oherwydd bod y ddau yn cynhyrchu cleient sy'n cysylltu ac yna'n methu. Yr ateb protocol cyntaf a gewch yw'r hyn sy'n eu gwahaniaethu, a dyna pam mae'n perthyn i'r tocyn.

Neges yw pennawd PROXY, nid togl

Yn y modiwl ffrwd, mae proxy_protocol on yn dweud wrth NGINX i ysgrifennu pennawd protocol PROXY tuag at yr ochr uchaf cyn y llwyth. Nid yw'n galluogi dirprwyo TCP, ac nid oes ganddo ddim i'w wneud ag amgryptio SSH. Nodyn a gyfeirir at y derbynnydd ydyw. Os na all y derbynnydd ei ddarllen, daw'n sothach ar ddechrau'r ffrwd.

Rhaid i'r gwasanaeth derbyn ddefnyddio'r pennawd hwnnw yn fwriadol. Mae sshd arferol yn disgwyl y gyfnewidfa adnabod SSH fel y bytau cyntaf ar y cysylltiad, felly mae rhaglith annisgwyl yn torri'r ysgwyd llaw mewn ffordd sy'n edrych fel gweinydd llygredig.

stream {
    server {
        listen 2222;
        proxy_pass 10.77.0.20:22;
    }
}

Y darn hwnnw yw holl gyfryngydd gweithiol ar gyfer cefn y gellir ei gyrraedd dros y VPN. Nid oes unrhyw gyfarwyddeb PROXY yn ymddangos oherwydd nad yw'r derbynnydd yn siarad y protocol, ac mae'r absenoldeb hwnnw'n benderfyniad yn hytrach nag esgeulustod.

Gwahanwch y ddau gyfeiriad hefyd. Mae gosod proxy_protocol ar y llinell listen yn golygu bod NGINX yn disgwyl i'w gleient ei hun anfon y pennawd yn gyntaf; mae ei alluogi ar gyfer cleient SSH cyffredin yn cynhyrchu'n union wrthwyneb y broblem y mae pobl fel arfer yn ceisio ei datrys.

Beth mae'r enw gwesteiwr cyhoeddus yn ei gyrraedd mewn gwirionedd

Mae tudalen HTTP 400 mewn sesiwn SSH yn dystiolaeth am yr ymyl. Mae rhywbeth ar y llwybr yn siarad HTTP, ac ni fydd unrhyw faint o waith allwedd neu gyfrif ar y cefn yn newid hynny. Stopiwch newid y cefn nes bod yr ymyl wedi'i setlo.

Mae cofnod dirprwyol arferol Cloudflare yn cludo ei draffig HTTP a HTTPS a gefnogir ar borthladdoedd penodol. Nid yw troi'r dirprwy ymlaen ar gyfer enw gwesteiwr yn creu cyfryngydd TCP cyffredinol, ac nid yw symud SSH i borthladd 443 yn ei wneud yn HTTPS.

Mae dau gyfeiriad ymarferol yn bodoli. Gall cofnod DNS yn unig bwyntio at eich cyfryngydd TCP eich hun, sy'n rhoi'r penderfyniad amddiffyn yn eich dwylo. Fel arall, defnyddiwch gynnyrch sy'n dogfennu cludo SSH yn benodol, gyda'i ffurfweddiad tarddiad, cleient a mynediad ei hun.

Pa un bynnag a ddewiswch, mae'r cyfryngydd yn dal i fod angen llwybr VPN i'r cefn, cysylltiad a ganiateir a llwybr dychwelyd. Nid yw'r llwybr yn ddewisol oherwydd bod yr ochr gyhoeddus yn gweithio.

Cadwch hunaniaeth SSH yn sefydlog trwy alias

Mae defnyddwyr fel arfer am barhau i deipio eu henw gwesteiwr presennol. Gall alias cyfluniad SSH wneud hynny heb newid unrhyw beth am y cyfryngydd, ac mae'n cadw'r newid ar ochr y cleient lle mae'n perthyn.

Host git.example.com
    HostName ssh-entry.example.net
    Port 2222
    User git
    HostKeyAlias git.example.com

Heb HostKeyAlias, mae OpenSSH yn chwilio am allwedd y gwesteiwr o dan yr enw y mae'n cysylltu ag ef, felly mae'r cofnod yn symud ac mae pob defnyddiwr yn gweld rhybudd allwedd a newidiwyd ar y defnydd cyntaf. Mae gosod yr alias yn cadw cofnodion known-hosts yn sefydlog tra bod y cysylltiad yn dal i gysylltu â'r cyfryngydd.

Mae'r alias hwn yn berthnasol i o bell sy'n seiliedig ar SSH yn unig. Nid yw URL Git HTTPS yn ei ymgynghori, a rhaid i URL o bell arferol gyd-fynd â'r cludiant a ddarparwyd gennych mewn gwirionedd.

Yr hyn na ddylech ei wneud yw analluogi gwirio allwedd gwesteiwr i wneud i'r rhybudd fynd i ffwrdd. Mae hynny'n dileu amddiffyniad na ofynnodd y trwsio anfon erioed i chi ei gyffwrdd, ac mae'n troi annifyrrwch cosmetig yn amlygiad go iawn.

Gwirio pob naid ar wahân

Profwch y gwrandäwr cyhoeddus ar ei ben ei hun, yna'r cysylltiad cyfryngydd-i-gefn o westeiwr y cyfryngydd, a dim ond ar ôl hynny'r cleient o'r dechrau i'r diwedd. Mae pob un o'r tri phrawf hynny'n diystyru haen wahanol. Mae hepgor un yn golygu na ellir dehongli'r ddau ganlyniad sy'n weddill. Tair arsylwi, tri lle y gall methiant fyw.

Cadwch y cyfeiriad cyrchfan, y porthladd a'r bytau protocol cyntaf gyda phob canlyniad. Mae'r triawd hwnnw'n gwahaniaethu gwall ymyl oddi wrth broblem llwybro VPN oddi wrth fethiant dilysu SSH, a dyna'r gwahaniaeth rhwng trwsio a dyfalu.

Yn olaf, dogfennwch yr amlygiad a fwriadwyd. Mae cyfryngydd TCP sy'n cludo SSH i gefn preifat yn agoriad bwriadol yn y perimedr cyhoeddus, ac mae'n haeddu'r un adolygiad â unrhyw wasanaeth mewnol arall.

Erthyglau cysylltiedig