SSH అంటే ఏమిటి? ఇది ఎలా పనిచేస్తుంది?
SSH ప్రోటోకాల్ ద్వారా రిమోట్ సర్వర్ను సురక్షితంగా ఎలా కనెక్ట్ చేయాలో తెలుసుకోండి. పోర్ట్ 22, హోస్ట్ కీ ఫింగర్ప్రింట్స్, మరియు పాస్వర్డ్ కంటే కీ-బేస్డ్ లాగిన్ ఎందుకు ఉత్తమమో ఇక్కడ
SSH అంటే ఏమిటి?
SSH (secure shell) అనేది మరొక చోట ఉన్న కంప్యూటర్లోకి లాగిన్ అవ్వడానికి మరియు ఎన్క్రిప్ట్ చేయబడిన కనెక్షన్ ద్వారా దానిపై కమాండ్లను రన్ చేయడానికి ఉపయోగించే ఒక ప్రోటోకాల్. మీరు టైప్ చేసేది రిమోట్ మెషీన్కు చేరుతుంది, దాని అవుట్పుట్ తిరిగి వస్తుంది, మరియు మధ్యలో నెట్వర్క్ను గమనించే ఎవరూ వీటిని చదవలేరు. అద్దెకు తీసుకున్న Linux సర్వర్కు స్క్రీన్ లేదా కీబోర్డ్ ఉండదు, కాబట్టి SSH ద్వారానే ఆ మెషీన్ను ఉపయోగించడం సాధ్యమవుతుంది.
ఈ పేరు రెండు విషయాలను సూచిస్తుంది. SSH అనేది RFC 4251 నుండి RFC 4254 వరకు వివరించబడిన ప్రోటోకాల్. OpenSSH అనేది దీనిని అమలు చేసే ప్రోగ్రామ్, మరియు దాదాపు ప్రతి Linux సర్వర్ మరియు ప్రతి ల్యాప్టాప్లో ఇది రన్ అవుతుంది. ఎవరైనా "SSH into the server" అని అన్నప్పుడు, వారి మెషీన్లోని క్లయింట్ ప్రోగ్రామ్ ssh, అవతలి వైపు ఉన్న సర్వర్ ప్రోగ్రామ్ sshd తో కమ్యూనికేట్ అవుతోందని అర్థం.
SSH దేనిని భర్తీ చేయడానికి రూపొందించబడిందో ఆ సమస్య
రిమోట్ లాగిన్ అనేది SSH కంటే చాలా పాతది. Telnet పోర్ట్ 23కి ఒక plain TCP కనెక్షన్ను తెరిచి, ప్రతి బైట్ను టైప్ చేసినట్లుగానే పంపుతుంది. ఇందులో ఏదీ ఎన్క్రిప్ట్ చేయబడదు, మీ పాస్వర్డ్ కూడా అందులోనే ఉంటుంది. ట్రాఫిక్ను చూడగలిగే ఎవరైనా దానిని చదవగలరు: అదే ఆఫీస్ నెట్వర్క్లో ఉన్న వ్యక్తి లేదా ఆ మార్గంలో ఉన్న ఏదైనా రూటర్ ఆపరేటర్. rlogin ఫ్యామిలీకి కూడా అదే బలహీనత ఉంది, మరియు అది క్లయింట్ మెషీన్ను దాని పేరు ద్వారా నమ్ముతుంది, అంటే నెట్వర్క్ ఏ పేరును క్లెయిమ్ చేస్తే దానిని నమ్మడమే.
Tatu Ylönen 1995లో హెల్సింకి యూనివర్సిటీ ఆఫ్ టెక్నాలజీలో మొదటి SSHను రాశారు, యూనివర్సిటీ నెట్వర్క్పై జరిగిన పాస్వర్డ్ స్నిఫింగ్ దాడి తర్వాత ఇది జరిగింది. ఈ డిజైన్ telnet లోని ఉపయోగకరమైన భాగాన్ని, అంటే మీ టెర్మినల్ మరియు రిమోట్ షెల్ మధ్య బైట్ స్ట్రీమ్ను అలాగే ఉంచుతుంది, మరియు telnet లో లేని రెండు ముఖ్యమైన అంశాలను జోడిస్తుంది: స్ట్రీమ్ యొక్క ఎన్క్రిప్షన్, మరియు అవతలి వైపు ఉన్న సర్వర్ మీరు చేరుకోవాలనుకున్నదేనని నిరూపించడం.
ఆ రెండో భాగాన్ని విస్మరించడం సులభం, కానీ SSHలో అది సగం భాగం. ఎన్క్రిప్షన్ మాత్రమే మిమ్మల్ని రక్షించలేదు. మధ్యలో ఉన్న ఒక మెషీన్ మీ కనెక్షన్ను స్వీకరించి, దానిని పక్కాగా ఎన్క్రిప్ట్ చేసి, మీరు పంపే ప్రతిదాన్ని చదివి, ఆపై అసలు సర్వర్కు పంపగలదు. SSH దీనిని అడ్డుకుంటుంది; ప్రతి సర్వర్కు host key అని పిలువబడే ఒక శాశ్వత గుర్తింపును ఇచ్చి, ప్రతి కనెక్షన్ వద్ద దానిని తనిఖీ చేస్తుంది.
క్లయింట్ మరియు సర్వర్ మోడల్ ఎలా పనిచేస్తుంది
ఇక్కడ రెండు ప్రోగ్రామ్లు ఉంటాయి. సర్వర్పై, sshd నిరంతరం నడుస్తూ కనెక్షన్ల కోసం వేచి ఉంటుంది. మీ మెషీన్లో, ssh వాటిని ఏర్పాటు చేస్తుంది. ఇవి వేర్వేరు కాన్ఫిగరేషన్ ఫైళ్లతో ఉండే ప్రత్యేక ప్రోగ్రామ్లు. వీటిని గందరగోళానికి గురిచేయడం వల్లే చేసిన మార్పులు ప్రభావం చూపకపోవడం సర్వసాధారణంగా జరుగుతుంది.
- సర్వర్
/etc/ssh/sshd_configను చదువుతుంది. ఇక్కడే పాస్వర్డ్ లాగిన్ను నిలిపివేయడం మరియు వినే (listening) పోర్ట్ను సెట్ చేయడం జరుగుతుంది. - క్లయింట్ సిస్టమ్ డిఫాల్ట్ల కోసం
/etc/ssh/ssh_configను, ఆపై మీ స్వంత హోస్ట్-నిర్దిష్ట సెట్టింగ్ల కోసం~/.ssh/configను చదువుతుంది.
Debian మరియు Ubuntu లలో సర్వీస్ యూనిట్ను ssh అని పిలుస్తారు. RHEL, Rocky మరియు Fedora లలో దీనిని sshd అని పిలుస్తారు. ఇటీవలి Ubuntu విడుదలలు దీనిని సాకెట్ యాక్టివేటెడ్ (socket activated) పద్ధతిలో ఇన్స్టాల్ చేస్తున్నాయి. కాబట్టి, మెషీన్ పూర్తిగా అందుబాటులో ఉన్నప్పటికీ systemctl status ssh అనేది inactive (dead) అని చూపవచ్చు. ఎందుకంటే ssh.socket అనేది వినే (listening) పనిని చేసే యూనిట్ మరియు ఇది అవసరమైనప్పుడు మాత్రమే సర్వీస్ను ప్రారంభిస్తుంది.
క్లయింట్ తప్పనిసరిగా OpenSSH అయి ఉండాల్సిన అవసరం లేదు. Windows లోని PuTTY, ఫోన్లోని Termius, మరియు ఎడిటర్లలో అంతర్నిర్మితంగా ఉండే రిమోట్ సపోర్ట్ అన్నీ ఒకే ప్రోటోకాల్ను ఉపయోగించి అదే sshd తో కమ్యూనికేట్ చేస్తాయి. Windows 10 మరియు 11 లలో కూడా OpenSSH క్లయింట్ ఉంటుంది, కాబట్టి ఏమీ ఇన్స్టాల్ చేయకుండానే PowerShell లో ssh you@server పనిచేస్తుంది.
SSH ఎందుకు 22వ పోర్ట్ను ఉపయోగిస్తుంది?
ఒక పోర్ట్ అనేది ఇన్కమింగ్ కనెక్షన్ ఏ ప్రోగ్రామ్కు చెందుతుందో కెర్నల్కు తెలియజేసే సంఖ్య. Linux లోని పోర్ట్లు ప్రతి సేవకు ఇదే విధంగా పనిచేస్తాయి. 1995లో IANA దీనిని కేటాయించినందున SSH 22వ పోర్ట్ను ఉపయోగిస్తుంది. SSH ఏ ప్రోటోకాల్లను భర్తీ చేయడానికి రూపొందించబడిందో, వాటి పక్కనే ఖాళీగా ఉన్న సంఖ్యను Ylönen కోరారు: 21వ పోర్ట్ FTPకి, 23వ పోర్ట్ telnetకి కేటాయించబడ్డాయి, 22వ పోర్ట్ అప్పట్లో ఖాళీగా ఉంది.
22వ పోర్ట్ డిఫాల్ట్ కాబట్టి, అన్నీ దానినే ఉపయోగిస్తాయని భావిస్తాయి. మీ Git రిమోట్, మీ బ్యాకప్ స్క్రిప్ట్ మరియు మీ ప్రొవైడర్ కంట్రోల్ ప్యానెల్ అన్నీ మొదట 22వ పోర్ట్నే ప్రయత్నిస్తాయి. ఇంటర్నెట్లోని ప్రతి ఆటోమేటెడ్ స్కానర్ కూడా ఇదే చేస్తుంది. పాస్వర్డ్ లాగిన్ ఎనేబుల్ చేయబడిన కొత్త సర్వర్, బూట్ అయిన నిమిషాల్లోనే /var/log/auth.log లో ఇలాంటి లైన్లను సేకరించడం ప్రారంభిస్తుంది:
Failed password for invalid user admin from 203.0.113.55 port 43122 ssh2ఆ ట్రాఫిక్ నిరంతరంగా ఉంటుంది, అది మిమ్మల్ని వ్యక్తిగతంగా లక్ష్యంగా చేసుకున్నది కాదు. sshd ను 2222వ పోర్ట్కు మార్చడం వల్ల ఆ లైన్లలో చాలా వరకు తగ్గుతాయి, ఎందుకంటే స్కానర్లు మీ సర్వర్ను ప్రత్యేకంగా పరిశీలించకుండా, ఇంటర్నెట్ మొత్తాన్ని 22వ పోర్ట్ ద్వారా స్కాన్ చేస్తుంటాయి. ఇది సర్వర్ను ఎవరైనా చూస్తే సులభంగా బ్రేక్-ఇన్ చేయకుండా ఆపలేదు. పోర్ట్ మార్పును కేవలం అనవసరమైన ట్రాఫిక్ను తగ్గించే పద్ధతిగా మాత్రమే చూడండి, అంతకు మించి ఏమీ లేదు.
మీరు లాగిన్ అవ్వకముందే సర్వర్ ఎలా స్పందిస్తుందో చూడవచ్చు:
nc 203.0.113.10 22Ubuntu 24.04 లో ఇది SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13 కి దగ్గరగా ఉన్న సమాచారాన్ని ప్రింట్ చేస్తుంది. ప్రోటోకాల్ వెర్షన్ను అంగీకరించడానికి ఇరువైపులా ఇది అవసరం కాబట్టి, ఎన్క్రిప్షన్ ప్రారంభం కాకముందే ఈ బ్యానర్ క్లియర్టెక్స్ట్లో పంపబడుతుంది. కనెక్షన్ను మూసివేయడానికి Ctrl+C నొక్కండి.
మీరు కనెక్ట్ అయినప్పుడు నెట్వర్క్లో ఏమి జరుగుతుంది
మీకు ప్రాంప్ట్ కనిపించే ముందు ఒక ssh you@server చేసే పని క్రమం ఇక్కడ ఉంది.
- క్లయింట్ హోస్ట్నేమ్ను IP అడ్రస్గా రిజాల్వ్ చేస్తుంది, ఆపై పోర్ట్ 22కి TCP కనెక్షన్ను తెరుస్తుంది.
- రెండు వైపులా తమ వెర్షన్ బ్యానర్ను క్లియర్టెక్స్ట్లో పంపుతాయి.
- రెండు వైపులా తమకు మద్దతు ఉన్న అల్గారిథమ్ల జాబితాలను పంపుతాయి: కీ ఎక్స్ఛేంజ్, సైఫర్, మెసేజ్ అథెంటికేషన్, కంప్రెషన్. ఇవి కూడా క్లియర్టెక్స్ట్లోనే ఉంటాయి. రెండు వైపులా తెలిసిన అత్యంత బలమైన ఆప్షన్ను ఎంచుకుంటాయి.
- కీ ఎక్స్ఛేంజ్ జరుగుతుంది. ప్రస్తుత OpenSSH
curve25519-sha256ని ప్రాధాన్యతగా తీసుకుంటుంది. నెట్వర్క్ ద్వారా ఆ రహస్య సమాచారం ప్రయాణించకుండానే, రెండు వైపులా ఒకే షేర్డ్ సీక్రెట్ను పొందుతాయి. కాబట్టి, మొత్తం సంభాషణను రికార్డ్ చేసిన వ్యక్తి కూడా దాన్ని తర్వాత తెలుసుకోలేడు. - సర్వర్ ఆ ఎక్స్ఛేంజ్ ఫలితాన్ని తన హోస్ట్ ప్రైవేట్ కీతో సైన్ చేస్తుంది. మీ క్లయింట్ ఆ సంతకాన్ని తన వద్ద ఉన్న హోస్ట్ పబ్లిక్ కీతో సరిచూసుకుంటుంది. మధ్యలో ఉన్న వేరే యంత్రం మీ సర్వర్గా నటించకుండా ఆపే దశ ఇదే.
- ఎన్క్రిప్షన్ ప్రారంభమవుతుంది. ప్రస్తుత OpenSSHలో
chacha20-poly1305@openssh.comడిఫాల్ట్ సైఫర్. - అప్పుడే క్లయింట్ మిమ్మల్ని పాస్వర్డ్ లేదా కీతో అథెంటికేట్ చేస్తుంది. మీ యూజర్నేమ్ మరియు పాస్వర్డ్ ఎన్క్రిప్ట్ చేయబడిన ఛానెల్ లోపల ప్రయాణిస్తాయి.
- క్లయింట్ ఒక ఛానెల్ను తెరిచి షెల్ కోసం అభ్యర్థిస్తుంది.
ఈ జాబితాలోని క్రమమే telnet కు మరియు దీనికి ఉన్న పూర్తి వ్యత్యాసం. ఛానెల్ ఎన్క్రిప్ట్ అయిన తర్వాత మరియు సర్వర్ తన గుర్తింపును నిరూపించుకున్న తర్వాతే అథెంటికేషన్ జరుగుతుంది, కాబట్టి మీ పాస్వర్డ్ నెట్వర్క్లో ఎక్కడా బహిరంగంగా కనిపించదు.
నెట్వర్క్ను గమనించే వ్యక్తికి కొన్ని విషయాలు తెలుస్తాయి. వారు మీ IP అడ్రస్, సర్వర్ IP అడ్రస్, పోర్ట్ 22, రెండు క్లియర్టెక్స్ట్ వెర్షన్ బ్యానర్లు, మరియు ప్రతి ప్యాకెట్ యొక్క సమయం, సుమారు పరిమాణాన్ని చూడగలరు. వారు మీ యూజర్నేమ్, పాస్వర్డ్, మీ కమాండ్లు లేదా వాటి అవుట్పుట్ను చూడలేరు. 1వ దశలో జరిగే హోస్ట్నేమ్ లుకప్ SSHలో భాగం కాదు మరియు సాధారణంగా ప్రైవేట్గా ఉండదు, కాబట్టి మీ సర్వర్ పేరును రిజాల్వ్ చేసే DNS క్వెరీ సెషన్ సురక్షితంగా ఉన్నప్పటికీ, మీరు ఏ యంత్రాన్ని చేరుకోబోతున్నారో బయటపెట్టవచ్చు.
హోస్ట్ కీ మరియు మొదటి కనెక్షన్ ఫింగర్ప్రింట్ ప్రాంప్ట్
openssh-server ఇన్స్టాల్ చేసినప్పుడు, అది ఆ మెషీన్ కోసం హోస్ట్ కీ జతలను రూపొందించి, వాటిని /etc/ssh/ లో సేవ్ చేస్తుంది, ఉదాహరణకు ssh_host_ed25519_key మరియు ssh_host_ed25519_key.pub. ప్రైవేట్ కీ ఎప్పటికీ సర్వర్ నుండి బయటకు వెళ్లదు. పబ్లిక్ కీ సర్వర్ యొక్క గుర్తింపును సూచిస్తుంది, మరియు 5వ దశలో ఉన్న సిగ్నేచర్ దీనితోనే సరిచూడబడుతుంది.
మీరు ఒక కొత్త సర్వర్కు మొదటిసారి కనెక్ట్ అయినప్పుడు, మీ క్లయింట్ వద్ద పోల్చడానికి ఏమీ ఉండదు, కాబట్టి అది మిమ్మల్ని ఇలా అడుగుతుంది:
The authenticity of host '203.0.113.10 (203.0.113.10)' can't be established.
ED25519 key fingerprint is SHA256:E9nVQ5Sm2oQ3nGm5Zf1tOaU7Xh0k2p8bWc4dLrTvYxA.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?ఈ ఫింగర్ప్రింట్ అనేది హోస్ట్ పబ్లిక్ కీ యొక్క SHA256 హ్యాష్, ఇది base64 ఫార్మాట్లో ఉంటుంది, కాబట్టి దీన్ని కళ్లతో సులభంగా సరిచూసుకోవచ్చు. yes అని టైప్ చేయడం ద్వారా ఆ కీ మీ సొంత మెషీన్లోని ~/.ssh/known_hosts లోకి సేవ్ అవుతుంది. ఆ తర్వాత అదే అడ్రస్కు చేసే ప్రతి కనెక్షన్, సర్వర్ అందించే కీని నిల్వ ఉన్న కీతో పోల్చుతుంది. అవి సరిపోలితే, ఏమీ ప్రింట్ అవ్వదు మరియు మీరు నేరుగా మీ ప్రాంప్ట్కు చేరుకుంటారు.
ఈ విధానాన్ని 'ట్రస్ట్ ఆన్ ఫస్ట్ యూజ్' (trust on first use) అని పిలుస్తారు, దీని వల్ల కలిగే పరిణామాల గురించి స్పష్టంగా ఉండటం మంచిది. మొదటి కనెక్షన్ సమయంలో మీరు రక్షణ లేకుండా ఉంటారు, ఎందుకంటే మీరు ఇంతకు ముందు చూడని కీని అంగీకరిస్తున్నారు. ఈ రిస్క్ను తగ్గించడానికి, ఫింగర్ప్రింట్ను మరొక మార్గం ద్వారా పొంది సరిచూసుకోండి. చాలా మంది ప్రొవైడర్లు తమ వెబ్ కన్సోల్లోని బూట్ అవుట్పుట్లో దీన్ని చూపిస్తారు, మరియు మీరు సర్వర్లోనే దీన్ని ప్రింట్ చేయవచ్చు:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubఇది ప్రాంప్ట్లో మీకు కనిపించిన అదే SHA256: స్ట్రింగ్ను ప్రింట్ చేస్తుంది. ప్రాంప్ట్లో ఉన్న [fingerprint] ఎంపిక దీని కోసమే ఉంటుంది: మీకు తెలిసిన ఫింగర్ప్రింట్ను అక్కడ పేస్ట్ చేయండి, సర్వర్ అందించిన కీ మీరు ఆశించిన దానితో సరిపోలితేనే క్లయింట్ కనెక్షన్ను కొనసాగిస్తుంది.
Debian మరియు Ubuntu లలో, known_hosts డిఫాల్ట్గా హ్యాష్ చేయబడి ఉంటుంది, కాబట్టి ఆ ఫైల్లో రీడబుల్ హోస్ట్నేమ్లకు బదులుగా |1| తో ప్రారంభమయ్యే లైన్లు ఉంటాయి. ఒక హోస్ట్ యొక్క ఎంట్రీని కనుగొనడానికి ssh-keygen -F 203.0.113.10 రన్ చేయండి.
SSH ఎందుకు host key మారిందని చెబుతుంది?
ఎప్పటికైనా మీరు ఈ కింది హెచ్చరికను చూడాల్సి వస్తుంది:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!ఇది Host key verification failed. తో ముగుస్తుంది మరియు client కనెక్ట్ అవ్వడానికి నిరాకరిస్తుంది. ఇది Password authentication is disabled to avoid man-in-the-middle attacks. అని కూడా చూపిస్తుంది, ఎందుకంటే తెలియని యంత్రంలో మీ password టైప్ చేయడం వల్ల కలిగే ప్రమాదాన్ని నివారించడానికే ఈ తనిఖీ ఉద్దేశించబడింది.
ఈ సందేశం అత్యవసర పరిస్థితిలా అనిపించినప్పటికీ, చాలా సందర్భాలలో అది కాదు. సాధారణ కారణాలు ఇవే:
- మీరు సర్వర్ను మళ్లీ నిర్మించడం లేదా reinstall చేయడం వల్ల, మొదటి boot లోనే
sshdకొత్త host keys ను సృష్టించింది. ఇది అత్యంత సాధారణ కారణం. - మీరు ఒక VPS ను తొలగించి మరొకటి సృష్టించినప్పుడు, service provider పాత IP address ను కొత్త యంత్రానికి కేటాయించడం.
- మీరు ఒక forward లేదా load balancer ద్వారా కనెక్ట్ అవుతున్నప్పుడు, అది ఇప్పుడు వేరే backend యంత్రానికి చేరుకోవడం.
- నిజంగానే ఏదైనా కనెక్షన్ను అడ్డుకుంటుండటం (intercepting).
ఏదైనా తొలగించే ముందు అసలు కారణం ఏమిటో నిర్ణయించుకోండి. మీరు పది నిమిషాల క్రితమే యంత్రాన్ని reinstall చేసి ఉంటే, కారణం స్పష్టంగా తెలుస్తుంది. మీ వైపు ఏమీ మారకపోతే, ఆగి పరిశీలించండి, ఎందుకంటే ఈ హెచ్చరిక తన పనిని తాను సరిగ్గా చేస్తోంది. మీరు నిర్ధారించుకున్న తర్వాత, పాత entry ని తొలగించి మళ్లీ కనెక్ట్ అవ్వండి:
ssh-keygen -R 203.0.113.10తదుపరి కనెక్షన్లో మళ్లీ fingerprint prompt కనిపిస్తుంది, ఇది provider console లో ఉన్న దానితో సరిపోల్చుకోవడానికి మీకు కొత్త అవకాశం ఇస్తుంది.
Password login మరియు key login మధ్య వ్యత్యాసం
Password authentication మీ పాస్వర్డ్ను ఇప్పటికే ఎన్క్రిప్ట్ చేయబడిన ఛానెల్ ద్వారా పంపుతుంది, మరియు sshd దీనిని అకౌంట్ డేటాబేస్తో సరిచూస్తుంది, సాధారణంగా ఇది PAM (pluggable authentication modules) ద్వారా జరుగుతుంది. దీనికి ఎటువంటి ముందస్తు తయారీ అవసరం లేదు, అందుకే ఒక ప్రొవైడర్ మీకు కేవలం root పాస్వర్డ్తో కొత్త సర్వర్ను అందించగలరు.
దీనిలోని బలహీనత ఎన్క్రిప్షన్లో లేదు. పాస్వర్డ్ అనేది ఒక చిన్న రహస్యం, ప్రతి లాగిన్ సమయంలో మీరు దానిని సర్వర్కు పంపుతారు, మరియు port 22 ను ఎప్పుడూ అలసిపోని యంత్రాలు నిరంతరం ఊహించడానికి ప్రయత్నిస్తూనే ఉంటాయి.
Public key authentication భిన్నంగా పనిచేస్తుంది. మీరు మీ స్వంత యంత్రంలో ఒక key pair ను సృష్టిస్తారు. Public భాగం సర్వర్లోని మీ అకౌంట్లో ~/.ssh/authorized_keys లోకి వెళ్తుంది. Private భాగం మీ ల్యాప్టాప్లోనే ఉంటుంది మరియు ఎప్పటికీ ఎక్కడికీ పంపబడదు. లాగిన్ అవ్వడానికి, క్లయింట్ కీ ఎక్స్ఛేంజ్ నుండి వచ్చిన session identifier ను కలిగి ఉన్న డేటాను సైన్ చేస్తుంది, మరియు సర్వర్ తన వద్ద ఉన్న public key ని ఉపయోగించి ఆ సంతకాన్ని ధృవీకరిస్తుంది. సైన్ చేయబడిన డేటా ఈ ఒక్క సెషన్కు మాత్రమే పరిమితం కాబట్టి, ఒకవేళ ఎవరైనా ఆ సంతకాన్ని దొంగిలించినా, అది వేరే దేనికీ పనికిరాదు.
దిశను గమనించండి, ఎందుకంటే దీనిని తారుమారు చేయడం సాధారణం మరియు అది ప్రమాదకరం: public key సర్వర్పై ఉండాలి, private key మీ వద్దే ఉండాలి. ఒక సర్వర్పై కాపీ చేయబడిన private key ని మీరు ఇకపై నమ్మలేరు.
Key login కు దాని స్వంత వైఫల్య రీతులు ఉన్నాయి. ఫైల్ పర్మిషన్లు చాలా వదులుగా ఉన్నప్పుడు sshd కీలను విస్మరిస్తుంది, మరియు అది సర్వర్ లాగ్లో ఇలా కనిపిస్తుంది:
Authentication refused: bad ownership or modes for directory /home/ubuntu/.sshక్లయింట్ మీకు కేవలం Permission denied (publickey) అని మాత్రమే చెబుతుంది, ఇది పన్నెండు రకాల వేర్వేరు కారణాలకు ఒకే సందేశం, కాబట్టి publickey error ను సరిగ్గా చదవడం ఎలాగో నేర్చుకోవడం మీరు లాక్ అవ్వకముందే ముఖ్యం. కీలను సృష్టించడం, వాటిని passphrase తో రక్షించడం మరియు agent లో లోడ్ చేయడం వంటి ఆచరణాత్మక పనులు SSH key management లో ఉన్నాయి, మరియు మిమ్మల్ని మీరు చిక్కుల్లో పడకుండా password login ను ఆపివేయడం VPS పై SSH ను పటిష్టం చేయడం లో ఉంది.
SFTP, scp మరియు port forwarding ఒకే కనెక్షన్పై పనిచేస్తాయి
SSH ప్రపంచంలోని మిగిలిన అంశాలను అర్థం చేసుకోవడానికి ఇది కీలకమైన భావన. Authentication ఒక encrypted కనెక్షన్ను తెరుస్తుంది, మరియు ఆ కనెక్షన్ ఒకే సమయంలో అనేక స్వతంత్ర ఛానెళ్లను మోయగలదు. Shell అనేది అందుబాటులో ఉన్న అనేక ఛానెళ్లలో ఒకటి మాత్రమే.
- రిమోట్ shell.
ssh you@serverఒక session ఛానెల్ను తెరిచి, interactive shell కోసం అభ్యర్థిస్తుంది. - ఒకే కమాండ్.
ssh you@server uptimeఒక ఛానెల్ను తెరిచి, ఒక కమాండ్ను రన్ చేసి, output ను ప్రింట్ చేసి నిష్క్రమిస్తుంది. - SFTP. క్లయింట్ తన
sftpసబ్సిస్టమ్ను ప్రారంభించమనిsshdని కోరుతుంది, మరియు ఫైల్ బదిలీ అదే కనెక్షన్ లోపల జరుగుతుంది. SFTP అనేది SSH పై పనిచేసే ఫైల్ బదిలీ ప్రోటోకాల్, దీనికి FTP తో ఎటువంటి సంబంధం లేదు. ఎన్క్రిప్షన్ జోడించిన FTP ప్రోటోకాల్ను FTPS అని పిలుస్తారు, ఇది దీనికి భిన్నమైనది. - scp. అదే లాగిన్ను ఉపయోగించి ఫైళ్లను కాపీ చేస్తుంది. 2022లో విడుదలైన OpenSSH 9.0 నుండి,
scpడిఫాల్ట్గా SFTP ప్రోటోకాల్ను ఉపయోగిస్తోంది. - Port forwarding.
ssh -L 8080:localhost:80 you@serverమీ ల్యాప్టాప్లోని port 8080 ను సర్వర్లోని port 80 కి ఒక ద్వారంగా మారుస్తుంది, ఇది encrypted కనెక్షన్ లోపల ప్రయాణిస్తుంది.-Rవ్యతిరేక దిశలో forward చేస్తుంది, మరియు-D 1080సెషన్ను SOCKS ప్రాక్సీగా మారుస్తుంది. - Git.
git@github.com:user/repo.gitవంటి రిమోట్ అనేది ఒక SSH లాగిన్, దీని రిమోట్ వైపు shell కు బదులుగా కమాండ్ హ్యాండ్లర్ రన్ అవుతుంది. - rsync మరియు Ansible కూడా SSH క్లయింట్లు. ఇవి ఒక ఛానెల్ను తెరిచి, ఏదైనా రన్ చేసి, output ను తిరిగి చదువుతాయి.
ఈ జాబితాలోని ప్రతి అంశం ఒకే port ను, ఒకే host key చెక్ను మరియు ఒకే credentials ను ఉపయోగిస్తుంది. అందుకే key authentication ను ఒక్కసారి సెటప్ చేయడం వల్ల వెంటనే ప్రయోజనం ఉంటుంది: ఈ టూల్స్ అన్నీ దానిని వారసత్వంగా పొందుతాయి. అందుకే మీ లాగిన్లను సులభతరం చేసే అదే ~/.ssh/config ఫైల్, మీరు అనేక Linux సర్వర్లను నిర్వహిస్తున్నప్పుడు స్కేల్ అవుతుంది.
SSH ఏమి చేయదు
- ఇది మీ సర్వర్ను సురక్షితం చేయదు. SSH అనేది తలుపుకు వెళ్లే మార్గాన్ని మాత్రమే రక్షిస్తుంది. తలుపు అలాగే ఉంటుంది, ఎవరైనా దాని హ్యాండిల్ను ప్రయత్నిస్తూనే ఉంటారు. fail2ban తో పదేపదే జరిగే లాగిన్ ప్రయత్నాలను నిరోధించడం ద్వారా వచ్చే అభ్యర్థనల సంఖ్యను నియంత్రించవచ్చు, మరియు key-only authentication ద్వారా వారు ఊహించే పాస్వర్డ్ అనే అంశమే లేకుండా చేయవచ్చు.
- ఇది మీ స్వంత కంప్యూటర్ నుండి మిమ్మల్ని రక్షించదు. మీ ల్యాప్టాప్కు యాక్సెస్ ఉన్న ఎవరికైనా మీ private key మరియు లోడ్ అయిన agent అందుబాటులో ఉంటాయి.
- మీరు SSH వాడుతున్నారనే విషయాన్ని ఇది దాచదు. పోర్ట్ నంబర్ మరియు cleartext version banner ఈ విషయాన్ని తెలియజేస్తాయి.
- కనెక్షన్ ఏర్పడకముందు జరిగే వాటిని ఇది కవర్ చేయదు. పేరును వెతకడం (name lookup) మరియు ఏ అడ్రస్ను నమ్మాలో మీరు తీసుకునే నిర్ణయం, ఇవన్నీ కనెక్షన్ కంటే ముందే జరుగుతాయి.
తదుపరి అడుగులు
మీరు ప్రస్తుతం ఒక ప్రొవైడర్ కన్సోల్లో కొత్త సర్వర్ను తెరిచి ఉంటే, అనుసరించాల్సిన క్రమం ఖచ్చితంగా ఉంటుంది. సర్వర్లోకి లాగిన్ అవ్వండి, ఒక సాధారణ వినియోగదారుని (normal user) సృష్టించండి, మీ key ని ఇన్స్టాల్ చేయండి, ఆపై సులభంగా యాక్సెస్ లభించే మార్గాలను మూసివేయండి. కొత్త VPSలో మొదటి పది నిమిషాలు ఈ క్రమాన్ని మొదటి నుండి చివరి వరకు వివరిస్తుంది, మరియు VPS అంటే ఏమిటి అనే అంశం మీకు ఈ పదాలు కొత్తగా అనిపిస్తే, దాని వెనుక ఉన్న యంత్రం గురించి వివరిస్తుంది. ఆ తర్వాత, keys మరియు hardening అనే రెండు పోస్ట్లను ఆ క్రమంలోనే చదవండి.
FAQ
SSH అంటే ఏమిటి?
SSH అంటే Secure Shell. ఇది ఒక రిమోట్ కంప్యూటర్లోకి లాగిన్ అవ్వడానికి మరియు ఎన్క్రిప్ట్ చేయబడిన కనెక్షన్ ద్వారా దానిపై కమాండ్లను రన్ చేయడానికి ఉపయోగించే ప్రోటోకాల్. దీనిని RFC 4251 నుండి RFC 4254 వరకు నిర్వచించారు. దాదాపు అందరూ ఉపయోగించే ఇంప్లిమెంటేషన్ OpenSSH: మీ మెషీన్లో ssh క్లయింట్ మరియు రిమోట్ మెషీన్లో sshd సర్వర్ ఉంటాయి. ఇది telnet స్థానంలో వచ్చింది; telnet పాస్వర్డ్లతో సహా ప్రతి విషయాన్ని నెట్వర్క్ ద్వారా ప్లెయిన్ టెక్స్ట్లో పంపుతుంది.
SSH ఎందుకు 22వ పోర్ట్ను ఉపయోగిస్తుంది?
IANA 1995లో SSHకి 22వ పోర్ట్ను కేటాయించింది. ఇది 21వ పోర్ట్లోని FTP మరియు 23వ పోర్ట్లోని telnet పక్కన ఉంటుంది; వీటిని భర్తీ చేయడానికి SSH రూపొందించబడింది. ఆ నంబర్ను మార్చకుండా ఉండాలనే నిబంధన ఏమీ లేదు: సర్వర్లో /etc/ssh/sshd_config లోని Port ద్వారా దీనిని మార్చవచ్చు, మరియు క్లయింట్లో ssh -p ద్వారా వేరే పోర్ట్ను ఎంచుకోవచ్చు. 22 డిఫాల్ట్ పోర్ట్ కాబట్టి, ఆటోమేటెడ్ స్కానర్లు నిరంతరం దానిని తడుతుంటాయి. అందుకే కొత్త సర్వర్ యొక్క /var/log/auth.log లో Failed password for invalid user లైన్లు నిండిపోతుంటాయి. పోర్ట్ను మార్చడం వల్ల ఆ శబ్దం (noise) తగ్గుతుంది కానీ, అది ఎటువంటి నిజమైన రక్షణను అందించదు.
హోస్ట్ కీ మారిందని SSH హెచ్చరించినప్పుడు నేను ఏమి చేయాలి?
ఏదైనా తొలగించే ముందు దానికి కారణాన్ని కనుగొనండి. సాధారణంగా దీనికి కారణం ప్రమాదకరం కాదు: సర్వర్ రీబిల్డ్ చేయబడినప్పుడు sshd కొత్త హోస్ట్ కీలను జనరేట్ చేస్తుంది, లేదా పాత IP అడ్రస్ను కొత్త మెషీన్కు కేటాయించి ఉండవచ్చు. మెషీన్ రీబిల్డ్ చేయబడిందని మీకు తెలిస్తే, స్టోర్ అయిన కీని తొలగించడానికి ssh-keygen -R <host> రన్ చేయండి, మళ్ళీ కనెక్ట్ అవ్వండి, మరియు మీకు కనిపించే ఫింగర్ప్రింట్ను మీ ప్రొవైడర్ కన్సోల్ రిపోర్ట్ చేసే దానితో సరిపోల్చండి. మీ వైపు ఎటువంటి మార్పులు జరగకపోతే, కనెక్ట్ అవ్వకండి మరియు మీ పాస్వర్డ్ను టైప్ చేయకండి. సరిగ్గా ఇదే కారణం చేత OpenSSH ఈ స్థితిలో పాస్వర్డ్ అథెంటికేషన్ను తిరస్కరిస్తుంది.
SFTP మరియు scp అనేవి SSH కంటే భిన్నమైనవా?
అవి SSH పైన నడుస్తాయి. మీరు అథెంటికేట్ అయిన తర్వాత, SSH కనెక్షన్ అనేక ఛానెళ్లను మోయగలదు, అందులో షెల్ అనేది ఒకటి మాత్రమే. SFTP అనేది ఒక ఫైల్ ట్రాన్స్ఫర్ ప్రోటోకాల్, ఇది అదే కనెక్షన్ ద్వారా sshd యొక్క sftp సబ్సిస్టమ్ను ఉపయోగిస్తుంది. OpenSSH 9.0 నుండి scp అంతర్గతంగా SFTP ప్రోటోకాల్నే ఉపయోగిస్తోంది. పోర్ట్ ఫార్వార్డింగ్ మరియు SSH ద్వారా Git కూడా అదే కనెక్షన్లోని ఛానెళ్లే. ఇవన్నీ ఒకే పోర్ట్, ఒకే హోస్ట్ కీ చెక్ మరియు ఒకే లాగిన్ విధానాన్ని ఉపయోగిస్తాయి. SFTP అంటే ఎన్క్రిప్షన్ జోడించిన FTP కాదని గమనించండి; దానిని FTPS అంటారు మరియు అది ఒక ప్రత్యేక ప్రోటోకాల్.
కీ అథెంటికేషన్ నిజంగా పాస్వర్డ్ కంటే మెరుగైనదా?
అవును, ఇంటర్నెట్ ద్వారా యాక్సెస్ చేయగల ఏ సర్వర్కైనా ఇది మెరుగైనది. పాస్వర్డ్ అనేది ప్రతి లాగిన్ సమయంలో మీరు సర్వర్కు ఇచ్చే ఒక చిన్న రహస్యం, మరియు 22వ పోర్ట్ను ఆటోమేటెడ్ క్లయింట్లు నిరంతరం ఊహించడానికి ప్రయత్నిస్తుంటాయి. కీ పెయిర్తో, ప్రైవేట్ కీ మీ మెషీన్ దాటి బయటకు వెళ్లదు: క్లయింట్ ప్రస్తుత సెషన్కు సంబంధించిన డేటాను సైన్ చేస్తుంది, మరియు సర్వర్ ఆ సంతకాన్ని ~/.ssh/authorized_keys లోని పబ్లిక్ కీతో సరిచూస్తుంది. రికార్డ్ చేయబడిన సంతకాన్ని మరొక సర్వర్పై మళ్ళీ ఉపయోగించడం (replay) సాధ్యం కాదు. ప్రైవేట్ కీని పాస్ఫ్రేజ్తో రక్షించండి, ఎందుకంటే పాస్ఫ్రేజ్ లేని కీ ఫైల్ దొరికితే, దానిని కాపీ చేసిన ఎవరైనా లాగిన్ అవ్వగలరు.