SSH என்றால் என்ன? அது எவ்வாறு செயல்படுகிறது?
SSH என்பது தொலைதூர கணினியை பாதுகாப்பாக அணுக உதவும் ஒரு protocol ஆகும். Port 22, host key fingerprints, மற்றும் password-க்கு பதிலாக SSH key பயன்படுத்துவது எப்படி என்பதை அறியுங்கள்.
SSH என்றால் என்ன?
SSH (secure shell) என்பது தொலைதூரத்தில் உள்ள ஒரு கணினியில் உள்நுழைந்து, குறியாக்க இணைப்பின் (encrypted connection) வழியாக கட்டளைகளை இயக்குவதற்கான ஒரு protocol ஆகும். நீங்கள் தட்டச்சு செய்யும் தகவல்கள் தொலைதூர கணினிக்குச் செல்லும், அதன் வெளியீடு மீண்டும் உங்களுக்கு வரும்; இடையில் நெட்வொர்க்கைக் கண்காணிப்பவர்களால் எதையும் படிக்க முடியாது. வாடகைக்கு எடுக்கப்பட்ட Linux server-ல் திரை அல்லது விசைப்பலகை இணைக்கப்பட்டிருக்காது, எனவே SSH மூலமே அந்த கணினியைப் பயன்படுத்த முடியும்.
இந்த பெயர் இரண்டு விஷயங்களைக் குறிக்கிறது. SSH என்பது RFC 4251 முதல் RFC 4254 வரை விவரிக்கப்பட்டுள்ள protocol ஆகும். OpenSSH என்பது அதைச் செயல்படுத்தும் நிரல் (program) ஆகும்; இதுவே கிட்டத்தட்ட அனைத்து Linux server-களிலும், மடிக்கணினிகளிலும் இயங்குகிறது. யாராவது "SSH into the server" என்று கூறினால், அவர்கள் தங்கள் கணினியில் உள்ள client program ssh-ஐப் பயன்படுத்தி, மறுமுனையில் உள்ள server program sshd-உடன் தொடர்புகொள்வதைக் குறிக்கிறார்கள்.
SSH எதற்காக உருவாக்கப்பட்டது என்பதற்கான பின்னணி
Remote login வசதி SSH-க்கு முன்பே இருந்தது. Telnet, port 23-ல் ஒரு plain TCP connection-ஐத் தொடங்கி, நீங்கள் தட்டச்சு செய்யும் ஒவ்வொரு byte-ஐயும் அப்படியே அனுப்பியது. இதில் எந்தவிதமான encryption-உம் இல்லை; உங்கள் password-உம் இதில் அடங்கும். அந்த network-ல் இருக்கும் எவரும் அல்லது அந்தப் பாதையில் உள்ள எந்தவொரு router-ன் operator-உம் அந்த traffic-ஐப் பார்க்க முடியும். Rlogin குடும்பத்தைச் சேர்ந்த கருவிகளும் இதே பலவீனத்தைக் கொண்டிருந்தன. அவை client machine-ன் பெயரை நம்பின; அதாவது, network எதை அந்தப் பெயர் என்று சொல்கிறதோ அதை அவை அப்படியே நம்பின.
Helsinki University of Technology-ல் நடந்த ஒரு password sniffing தாக்குதலுக்குப் பிறகு, Tatu Ylönen என்பவர் 1995-ல் முதல் SSH-ஐ உருவாக்கினார். Telnet-ல் இருந்த பயனுள்ள அம்சமான, உங்கள் terminal-க்கும் remote shell-க்கும் இடையிலான byte stream பரிமாற்றத்தை இது அப்படியே தக்கவைத்துக் கொண்டது. அதே சமயம், Telnet-ல் இல்லாத இரண்டு முக்கியமான வசதிகளை இது சேர்த்தது: அந்த stream-ஐ encrypt செய்வது மற்றும் நீங்கள் தொடர்பு கொள்ள விரும்பிய server தான் மறுமுனையில் இருப்பதை உறுதி செய்வது.
இரண்டாவது அம்சத்தை நாம் எளிதாகக் கவனிக்கத் தவறிவிடலாம், ஆனால் SSH-ன் செயல்பாட்டில் இதுவே பாதி ஆகும். Encryption மட்டும் உங்களைக் காப்பாற்றிவிடாது. இடையில் இருக்கும் ஒரு machine உங்கள் connection-ஐ ஏற்றுக்கொண்டு, அதைச் சரியாக encrypt செய்து, நீங்கள் அனுப்பும் அனைத்தையும் படித்துவிட்டு, பின் உண்மையான server-க்கு அனுப்பி வைக்க முடியும். இதைத் தடுக்க, ஒவ்வொரு server-க்கும் host key எனப்படும் நிரந்தர அடையாளத்தை SSH வழங்குகிறது. ஒவ்வொரு முறை connection ஏற்படும்போதும் இந்த அடையாளத்தைச் சரிபார்ப்பதன் மூலம் SSH பாதுகாப்பை உறுதி செய்கிறது.
Client மற்றும் server மாதிரி எவ்வாறு செயல்படுகிறது
இதில் இரண்டு நிரல்கள் உள்ளன. Server-ல், sshd எப்போதும் இயங்கிக்கொண்டிருக்கும் மற்றும் இணைப்புகளுக்காகக் காத்திருக்கும். உங்கள் கணினியில், ssh இணைப்புகளை உருவாக்கும். இவை தனித்தனி configuration கோப்புகளைக் கொண்ட தனித்தனி நிரல்கள். இரண்டையும் குழப்பிக்கொள்வதுதான், நீங்கள் செய்யும் மாற்றங்கள் ஏன் பலனளிக்கவில்லை என்பதற்கு மிக முக்கியமான காரணமாகும்.
- Server
/etc/ssh/sshd_config-ஐ வாசிக்கும். இதில்தான் password login முடக்கப்படுகிறது மற்றும் listening port அமைக்கப்படுகிறது. - Client கணினி அளவிலான defaults-க்காக
/etc/ssh/ssh_config-ஐயும், குறிப்பிட்ட host அமைப்புகளுக்காக~/.ssh/config-ஐயும் வாசிக்கும்.
Debian மற்றும் Ubuntu-வில் service unit ssh என்று அழைக்கப்படுகிறது. RHEL, Rocky மற்றும் Fedora-வில் இது sshd என்று அழைக்கப்படுகிறது. சமீபத்திய Ubuntu பதிப்புகள் இதை socket activated முறையில் நிறுவுகின்றன. எனவே, கணினி முழுமையாக அணுகக்கூடிய நிலையில் இருந்தாலும், systemctl status ssh ஆனது inactive (dead) என்று காட்டக்கூடும். ஏனெனில், ssh.socket தான் listening செய்யும் unit மற்றும் அது தேவைப்படும்போது மட்டுமே service-ஐத் தொடங்கும்.
Client என்பது OpenSSH ஆகத்தான் இருக்க வேண்டும் என்பதில்லை. Windows-ல் உள்ள PuTTY, தொலைபேசியில் உள்ள Termius மற்றும் editors-ல் உள்ளமைக்கப்பட்ட remote support என அனைத்தும் ஒரே protocol-ஐப் பயன்படுத்தி அதே sshd-உடன் பேசுகின்றன. Windows 10 மற்றும் 11-ல் OpenSSH client உள்ளமைக்கப்பட்டிருப்பதால், எதையும் நிறுவ வேண்டிய அவசியமின்றி PowerShell-ல் ssh you@server நேரடியாகச் செயல்படும்.
SSH ஏன் port 22-ஐப் பயன்படுத்துகிறது?
ஒரு port என்பது, உள்வரும் இணைப்பு எந்த listening program-க்கு உரியது என்பதை kernel-க்குத் தெரிவிக்கும் எண்ணாகும். Linux-ல் ports அனைத்து service-களுக்கும் இதே முறையில்தான் செயல்படுகின்றன. 1995-ல் IANA இந்த எண்ணை ஒதுக்கியதால் SSH 22-ஐப் பயன்படுத்துகிறது. SSH எந்தெந்த protocols-க்கு மாற்றாக எழுதப்பட்டதோ, அவற்றுக்கு அருகிலேயே ஒரு காலியான எண்ணை Ylönen கேட்டார்: 21 என்பது FTP, 23 என்பது telnet, மற்றும் 22 காலியாக இருந்தது.
22 என்பது default என்பதால், அனைத்தும் அதையே எதிர்பார்க்கின்றன. உங்கள் Git remote, backup script மற்றும் உங்கள் provider-ன் control panel என அனைத்தும் முதலில் 22-ஐயே முயற்சிக்கும். இணையத்தில் உள்ள அனைத்து automated scanner-களும் அப்படியே செய்கின்றன. Password login வசதியுடன் கூடிய ஒரு புதிய server, boot செய்த சில நிமிடங்களிலேயே /var/log/auth.log-ல் இது போன்ற வரிகளைச் சேகரிக்கத் தொடங்கும்:
Failed password for invalid user admin from 203.0.113.55 port 43122 ssh2அந்த traffic தொடர்ச்சியானது, அது உங்களை மட்டும் குறிவைத்து வருவதல்ல. sshd-ஐ port 2222-க்கு மாற்றுவது அந்த வரிகளில் பெரும்பாலானவற்றை நீக்கிவிடும், ஏனெனில் scanner-கள் உங்கள் server-ஐ ஆய்வு செய்வதற்குப் பதிலாக, இணையம் முழுவதையும் 22-ல் தேடிக்கொண்டிருக்கின்றன. இது, உங்கள் server-ஐ உற்று நோக்கும் எவருக்கும் அதை உடைப்பதை கடினமாக்காது. port மாற்றத்தை ஒரு இரைச்சல் குறைப்பு (noise reduction) நடவடிக்கையாக மட்டுமே கருதுங்கள்.
நீங்கள் login செய்வதற்கு முன்பே server பதிலளிப்பதை இவ்வாறு கவனிக்கலாம்:
nc 203.0.113.10 22Ubuntu 24.04-ல் இது SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13-க்கு நெருக்கமான ஒன்றை அச்சிடும். எந்தவொரு encryption-ம் ஏற்படுவதற்கு முன்பே, இந்த banner cleartext-ல் அனுப்பப்படுகிறது, ஏனெனில் protocol version-ஐ ஒப்புக்கொள்ள இரு தரப்புக்கும் இது தேவைப்படுகிறது. இணைப்பைத் துண்டிக்க Ctrl+C அழுத்தவும்.
இணைப்பை ஏற்படுத்தும்போது நெட்வொர்க்கில் என்ன நடக்கிறது
நீங்கள் prompt-ஐப் பார்ப்பதற்கு முன்பு ஒரு ssh you@server செய்யும் செயல்பாடுகள் கீழே கொடுக்கப்பட்டுள்ளன.
- Client, hostname-ஐ IP address-ஆக மாற்றுகிறது (resolve), பின்னர் port 22-க்கு ஒரு TCP இணைப்பைத் திறக்கிறது.
- இரு தரப்பும் தங்கள் version banner-ஐ cleartext வடிவில் பரிமாறிக்கொள்கின்றன.
- இரு தரப்பும் தாங்கள் ஆதரிக்கும் algorithms பட்டியலை (key exchange, cipher, message authentication, compression) அனுப்புகின்றன. இதுவும் cleartext வடிவிலேயே இருக்கும். இரு தரப்புக்கும் தெரிந்தவற்றில் வலிமையான விருப்பம் தேர்ந்தெடுக்கப்படும்.
- Key exchange நடைபெறுகிறது. தற்போதைய OpenSSH,
curve25519-sha256-ஐ முன்னுரிமைப்படுத்துகிறது. நெட்வொர்க் வழியாக ரகசியத் தகவல்கள் பரிமாறப்படாமலேயே, இரு முனைகளிலும் ஒரே shared secret உருவாகிறது. எனவே, முழு உரையாடலையும் பதிவு செய்த ஒருவரால் கூட, பின்னர் அதைத் தெரிந்துகொள்ள முடியாது. - Server, அந்த exchange-ன் முடிவை தனது host private key மூலம் கையொப்பமிடுகிறது (sign). உங்கள் client, அந்த கையொப்பத்தை தன்னிடம் உள்ள host public key-யுடன் ஒப்பிட்டுச் சரிபார்க்கிறது. இடையில் இருக்கும் ஒரு இயந்திரம் உங்கள் server போல நடித்து உங்களை ஏமாற்றுவதைத் தடுக்கும் படிநிலை இதுவே.
- Encryption தொடங்குகிறது. தற்போதைய OpenSSH-ல்
chacha20-poly1305@openssh.comஇயல்புநிலை cipher-ஆக உள்ளது. - இதற்குப் பிறகுதான், password அல்லது key மூலம் client உங்களை authenticate செய்கிறது. உங்கள் username மற்றும் password ஆகியவை encrypted channel-க்குள் பயணிக்கின்றன.
- Client ஒரு channel-ஐத் திறந்து shell-ஐக் கோருகிறது.
இந்த வரிசைமுறைதான் telnet-க்கும் இதற்கும் உள்ள முழுமையான வேறுபாடு. Channel encrypted செய்யப்பட்ட பிறகும், server தனது அடையாளத்தை உறுதிப்படுத்திய பிறகும் மட்டுமே authentication நடக்கிறது. எனவே, உங்கள் password நெட்வொர்க்கில் வெளிப்படையாக இருக்கும் தருணம் எதுவுமில்லை.
நெட்வொர்க்கைக் கண்காணிப்பவர் சில தகவல்களை அறிய முடியும். உங்கள் IP address, server-ன் IP address, port 22, இரு தரப்பு cleartext version banners, மற்றும் ஒவ்வொரு packet-ன் நேரம் மற்றும் தோராயமான அளவு ஆகியவற்றை அவர்களால் பார்க்க முடியும். ஆனால், உங்கள் username, password, நீங்கள் கொடுக்கும் commands அல்லது அவற்றின் output ஆகியவற்றை அவர்களால் பார்க்க முடியாது. படிநிலை 1-ல் நடக்கும் hostname lookup என்பது SSH-ன் பகுதி அல்ல, அது பொதுவாகத் தனிப்பட்டது அல்ல. எனவே, உங்கள் server பெயரை resolve செய்யும் DNS query, நீங்கள் எந்த இயந்திரத்தை அணுகப் போகிறீர்கள் என்பதை வெளிப்படுத்திவிடும்; இருப்பினும் session முழுமையாகப் பாதுகாப்பாகவே இருக்கும்.
Host key மற்றும் முதல் இணைப்பு fingerprint prompt
openssh-server நிறுவப்படும்போது, அது அந்த machine-க்கான host key ஜோடிகளை உருவாக்கி, அவற்றை /etc/ssh/-ல் சேமிக்கும். உதாரணமாக ssh_host_ed25519_key மற்றும் ssh_host_ed25519_key.pub. இதில் private key சர்வரை விட்டு வெளியேறாது. Public key என்பது சர்வரின் அடையாளமாகும்; step 5-ல் உள்ள signature இதனுடன் தான் சரிபார்க்கப்படுகிறது.
நீங்கள் ஒரு புதிய சர்வருடன் முதல்முறை இணையும்போது, உங்கள் client-யிடம் ஒப்பிடுவதற்கு எந்த தகவலும் இருக்காது. எனவே அது உங்களிடம் இவ்வாறு கேட்கும்:
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])?இந்த fingerprint என்பது host public key-ன் SHA256 hash ஆகும். இது base64 வடிவில் இருப்பதால், கண்களால் ஒப்பிடுவதற்கு எளிதாக இருக்கும். yes என்று தட்டச்சு செய்வது, அந்த key-ஐ உங்கள் machine-ல் உள்ள ~/.ssh/known_hosts-ல் எழுதும். அதன் பிறகு அதே முகவரிக்கு நீங்கள் இணையும்போதெல்லாம், சர்வர் வழங்கும் key-யை சேமிக்கப்பட்ட key-யுடன் client ஒப்பிடும். இரண்டும் பொருந்தினால், எந்த செய்தியும் காட்டப்படாமல் நேரடியாக உங்கள் prompt-க்குச் சென்றுவிடுவீர்கள்.
இந்த முறை 'trust on first use' என்று அழைக்கப்படுகிறது. இதன் குறைபாடுகளைப் புரிந்துகொள்வது அவசியம். முதல் இணைப்பு மட்டுமே நீங்கள் பாதுகாப்பற்ற நிலையில் இருக்கும் தருணம், ஏனெனில் நீங்கள் இதுவரை பார்த்திராத ஒரு key-ஐ அப்போதுதான் ஏற்றுக்கொள்கிறீர்கள். இந்த இடைவெளியைக் குறைக்க, வேறொரு வழியில் fingerprint-ஐப் பெற்று ஒப்பிட்டுப் பார்க்கவும். பெரும்பாலான வழங்குநர்கள் (providers) தங்கள் web console-ல் உள்ள boot output-ல் இதைக் காண்பிப்பார்கள். சர்வரிலேயே நீங்கள் இதைப் பார்க்கலாம்:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pubஇது prompt-ல் காட்டப்பட்ட அதே SHA256: string-ஐ அச்சிடும். Prompt-ல் உள்ள [fingerprint] தேர்வு இதற்காகவே உள்ளது: நீங்கள் எதிர்பார்க்கும் fingerprint-ஐ அங்கே paste செய்யவும். சர்வர் வழங்கிய key-யுடன் அது பொருந்தினால் மட்டுமே client இணைப்பைத் தொடரும்.
Debian மற்றும் Ubuntu-வில், known_hosts இயல்பாகவே hashed நிலையில் இருக்கும். எனவே அந்த கோப்பில் உள்ள வரிகள் வாசிக்கக்கூடிய hostnames-க்கு பதிலாக |1| என்று தொடங்கும். ஒரு குறிப்பிட்ட host-க்கான entry-ஐக் கண்டறிய 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. என்பதையும் குறிப்பிடுகிறது, ஏனெனில் தெரியாத ஒரு machine-ல் உங்கள் password-ஐ உள்ளிடுவதைத் தடுப்பதற்காகவே இந்தச் சரிபார்ப்பு முறை உள்ளது.
இந்தச் செய்தி ஒரு அவசரநிலை போலத் தோன்றினாலும், பெரும்பாலான நேரங்களில் அது அப்படி இருப்பதில்லை. இதற்கான பொதுவான காரணங்கள்:
- நீங்கள் server-ஐ மீண்டும் உருவாக்கியுள்ளீர்கள் அல்லது reinstall செய்துள்ளீர்கள், எனவே முதல்முறை boot ஆகும்போது
sshdபுதிய host keys-ஐ உருவாக்கியிருக்கும். இதுவே மிக முக்கியமான காரணமாகும். - நீங்கள் ஒரு VPS-ஐ அழித்துவிட்டு இன்னொன்றை உருவாக்கியுள்ளீர்கள், அந்த service provider பழைய IP address-ஐ புதிய machine-க்கு வழங்கியிருக்கலாம்.
- நீங்கள் ஒரு forward அல்லது load balancer வழியாக இணைகிறீர்கள், அது இப்போது வேறொரு backend machine-க்குச் செல்கிறது.
- உண்மையில் ஏதோ ஒன்று உங்கள் இணைப்பை இடைமறிக்கிறது (intercept).
எந்தவொரு பதிவையும் நீக்குவதற்கு முன்பு, என்ன காரணம் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். நீங்கள் பத்து நிமிடங்களுக்கு முன்புதான் machine-ஐ reinstall செய்திருந்தால், காரணம் தெளிவாகத் தெரியும். உங்கள் தரப்பில் எந்த மாற்றமும் செய்யவில்லை என்றால், உடனடியாக நிறுத்திவிட்டு ஆய்வு செய்யுங்கள், ஏனெனில் இந்த எச்சரிக்கை அதன் பணியைச் சரியாகச் செய்கிறது என்று அர்த்தம். நீங்கள் உறுதியாக இருந்தால், பழைய பதிவை நீக்கிவிட்டு மீண்டும் இணையுங்கள்:
ssh-keygen -R 203.0.113.10அடுத்தமுறை இணையும்போது fingerprint prompt மீண்டும் தோன்றும், அப்போது provider console-ல் உள்ள fingerprint-உடன் அதை ஒப்பிட்டுப் பார்க்க உங்களுக்கு ஒரு வாய்ப்பு கிடைக்கும்.
Password login மற்றும் key login ஒப்பீடு
Password authentication, ஏற்கனவே குறியாக்கம் செய்யப்பட்ட (encrypted) சேனலுக்குள் உங்கள் கடவுச்சொல்லை அனுப்புகிறது. sshd, PAM (pluggable authentication modules) வழியாக கணக்கு தரவுத்தளத்துடன் (account database) அதைச் சரிபார்க்கிறது. இதற்கு எந்த முன் தயாரிப்பும் தேவையில்லை; இதனால்தான் ஒரு service provider உங்களுக்கு root கடவுச்சொல்லுடன் கூடிய புதிய server-ஐ வழங்க முடிகிறது.
இதன் பலவீனம் குறியாக்கத்தில் இல்லை. கடவுச்சொல் என்பது ஒரு சிறிய ரகசியம்; ஒவ்வொரு முறை login செய்யும்போதும் அதை server-க்கு அனுப்ப வேண்டியுள்ளது. மேலும், port 22-ஐ இடைவிடாமல் சோதிக்கும் தானியங்கி மென்பொருள்கள் (bots) சோர்வடைவதில்லை.
Public key authentication வேறு விதமாகச் செயல்படுகிறது. உங்கள் கணினியில் ஒரு key pair-ஐ உருவாக்குகிறீர்கள். அதன் public பகுதி, server-ல் உள்ள உங்கள் கணக்கில் ~/.ssh/authorized_keys-க்குள் வைக்கப்படுகிறது. private பகுதி உங்கள் மடிக்கணினியிலேயே இருக்கும், அது ஒருபோதும் அனுப்பப்படாது. Login செய்யும்போது, key exchange-ல் உள்ள session identifier-ஐ உள்ளடக்கிய தரவை client கையொப்பமிடுகிறது (signs). server, ஏற்கனவே தன்னிடம் உள்ள public key-ஐப் பயன்படுத்தி அந்த கையொப்பத்தைச் சரிபார்க்கிறது. கையொப்பமிடப்பட்ட தரவு இந்த ஒரு குறிப்பிட்ட session-க்கு மட்டுமே உரியது என்பதால், திருடப்பட்ட கையொப்பம் வேறு எதற்கும் பயன்படாது.
திசையைக் கவனமாகப் பார்க்கவும்; இதை மாற்றிச் செய்வது பொதுவானது மற்றும் ஆபத்தானது: public key server-க்குச் செல்ல வேண்டும், private key உங்களிடமே இருக்க வேண்டும். ஒரு server-க்கு நகலெடுக்கப்பட்ட private key-ஐ இனி நம்ப முடியாது.
Key login-ல் சில தோல்வி நிலைகள் உள்ளன. கோப்பு அனுமதிகள் (file permissions) மிகத் தளர்வாக இருந்தால் sshd key-களைப் புறக்கணிக்கும். இது server log-ல் இவ்வாறு பதிவாகும்:
Authentication refused: bad ownership or modes for directory /home/ubuntu/.sshClient எப்போதும் Permission denied (publickey) என்ற பொதுவான செய்தியை மட்டுமே காட்டும். இது பல வெவ்வேறு காரணங்களுக்காக ஒரே செய்தியைக் காட்டுகிறது. எனவே, publickey error-ஐச் சரியாகப் புரிந்துகொள்வது எப்படி என்பதை, நீங்கள் வெளியேற்றப்படுவதற்கு முன்பே கற்றுக்கொள்வது அவசியம். Key-களை உருவாக்குதல், passphrase மூலம் அவற்றைப் பாதுகாத்தல் மற்றும் agent-ல் ஏற்றுதல் போன்ற நடைமுறை வேலைகள் SSH key management பகுதியில் உள்ளன. உங்களை நீங்களே பூட்டிக்கொள்ளாமல் password login-ஐ முடக்குவது hardening SSH on a VPS பகுதியில் விளக்கப்பட்டுள்ளது.
SFTP, scp மற்றும் port forwarding ஆகியவை ஒரே இணைப்பைப் பயன்படுத்துகின்றன
SSH உலகின் பிற செயல்பாடுகள் எவ்வாறு இயங்குகின்றன என்பதைப் புரிந்துகொள்ள இந்த அடிப்படை கருத்து அவசியம். அங்கீகாரம் (authentication) ஒரு குறியாக்கம் செய்யப்பட்ட இணைப்பைத் திறக்கிறது; அந்த இணைப்பில் ஒரே நேரத்தில் பல சுதந்திரமான சேனல்களைக் கொண்டு செல்ல முடியும். ஒரு shell என்பது அத்தகைய பல சேனல்களில் ஒன்றாகும்.
- ஒரு remote shell.
ssh you@serverஒரு session சேனலைத் திறந்து, ஊடாடும் (interactive) shell-ஐக் கோருகிறது. - ஒரு ஒற்றைக் கட்டளை.
ssh you@server uptimeஒரு சேனலைத் திறந்து, ஒரு கட்டளையை இயக்கி, அதன் வெளியீட்டை அச்சிட்டு, வெளியேறுகிறது. - SFTP. client, server-ஐ அதன்
sftpsubsystem-ஐத் தொடங்கக் கோருகிறது (sshd). கோப்பு பரிமாற்றம் அதே இணைப்பிற்குள் நடைபெறுகிறது. SFTP என்பது SSH-ன் மேல் இயங்கும் ஒரு கோப்பு பரிமாற்ற நெறிமுறை; இதற்கும் FTP-க்கும் எந்தத் தொடர்பும் இல்லை. குறியாக்கம் சேர்க்கப்பட்ட FTP நெறிமுறை FTPS என்று அழைக்கப்படுகிறது, அது இதிலிருந்து முற்றிலும் மாறுபட்டது. - scp. அதே login-ஐப் பயன்படுத்தி கோப்புகளை நகலெடுக்கிறது. 2022-ல் வெளியான OpenSSH 9.0 முதல்,
scpஇயல்பாகவே SFTP நெறிமுறையைப் பயன்படுத்துகிறது. - Port forwarding.
ssh -L 8080:localhost:80 you@serverஉங்கள் laptop-ல் உள்ள port 8080-ஐ, server-ல் உள்ள port 80-க்கான நுழைவாயிலாக மாற்றுகிறது; இது குறியாக்கம் செய்யப்பட்ட இணைப்பிற்குள் கொண்டு செல்லப்படுகிறது.-Rஎதிர் திசையில் port-களை forward செய்கிறது, மற்றும்-D 1080இந்த session-ஐ ஒரு SOCKS proxy-ஆக மாற்றுகிறது. - Git.
git@github.com:user/repo.gitபோன்ற ஒரு remote, ஒரு SSH login ஆகும்; இதில் remote பக்கத்தில் shell-க்கு பதிலாக ஒரு command handler இயங்குகிறது. - rsync மற்றும் Ansible ஆகியவையும் SSH client-களே. அவை ஒரு சேனலைத் திறந்து, ஏதேனும் ஒன்றை இயக்கி, அதன் வெளியீட்டை மீண்டும் படிக்கின்றன.
மேலே உள்ள பட்டியலில் உள்ள ஒவ்வொரு உருப்படியும் ஒரே port, ஒரே host key சரிபார்ப்பு மற்றும் ஒரே நற்சான்றிதழ்களைப் (credentials) பயன்படுத்துகின்றன. இதனால்தான் key authentication-ஐ ஒருமுறை அமைப்பது உடனடியாகப் பலன் தருகிறது: அந்தத் திறவுகோலை இந்த அனைத்துக் கருவிகளும் பயன்படுத்திக்கொள்கின்றன. இதனால்தான், உங்கள் login-களை எளிதாக்கும் அதே ~/.ssh/config கோப்பு, நீங்கள் பல Linux server-களை நிர்வகிக்கும்போது உங்கள் பணிக்குத் துணையாக அமைகிறது.
SSH எவற்றைச் செய்யாது
- இது உங்கள் server-ஐ பாதுகாப்பானதாக மாற்றாது. SSH என்பது கதவுக்கான பாதையை மட்டுமே பாதுகாக்கிறது. கதவு அங்கேயேதான் இருக்கிறது, மக்கள் அதன் கைப்பிடியைத் தொடர்ந்து முயற்சித்துக் கொண்டே இருப்பார்கள். fail2ban மூலம் மீண்டும் மீண்டும் செய்யப்படும் login முயற்சிகளைத் தடுத்தல் என்பது வரும் கோரிக்கைகளின் எண்ணிக்கையைக் கையாளும், மேலும் key-only authentication என்பது அவர்கள் ஊகிக்கும் கடவுச்சொல் முறையை நீக்கிவிடும்.
- இது உங்கள் சொந்த கணினியிலிருந்து உங்களைப் பாதுகாக்காது. உங்கள் laptop-க்கு அணுகல் உள்ள எவரிடமும் உங்கள் private key மற்றும் loaded agent இருக்கும்.
- நீங்கள் SSH பயன்படுத்துவதை இது மறைக்காது. port எண் மற்றும் cleartext version banner ஆகியவை அதை வெளிப்படுத்திவிடும்.
- இணைப்பு ஏற்படுவதற்கு முன்பு நடப்பவற்றை இது உள்ளடக்காது. பெயர் தேடல் (name lookup) மற்றும் எந்த முகவரியை நம்புவது என்ற உங்கள் முடிவு ஆகிய இரண்டும் அதற்கு முன்பே நடக்கின்றன.
அடுத்து என்ன செய்ய வேண்டும்
உங்களிடம் புதிய server ஒன்று provider console-ல் இப்போது திறந்திருந்தால், பின்பற்ற வேண்டிய வரிசைமுறை நிலையானது. உள்ளே நுழைந்து, ஒரு சாதாரண user-ஐ உருவாக்கி, உங்கள் key-ஐ install செய்து, பின்னர் எளிதான நுழைவு வழிகளை மூடிவிடவும். புதிய VPS-ல் முதல் பத்து நிமிடங்கள் அந்த வரிசைமுறையைத் தொடக்கம் முதல் இறுதி வரை விளக்குகிறது, மேலும் VPS என்பது உண்மையில் என்ன என்பது குறித்த சொற்கள் உங்களுக்குப் புதியதாக இருந்தால், அதன் அடிப்படையிலான இயந்திர அமைப்பை அது விளக்குகிறது. அதன் பிறகு, keys மற்றும் hardening ஆகிய இரண்டு கட்டுரைகளை அந்த வரிசையிலேயே படிக்க வேண்டும்.
FAQ
SSH என்பதன் விரிவாக்கம் என்ன?
SSH என்பது Secure Shell என்பதன் சுருக்கமாகும். இது ஒரு தொலைதூர கணினியில் உள்நுழைந்து, குறியாக்கம் செய்யப்பட்ட (encrypted) இணைப்பின் மூலம் கட்டளைகளை இயக்குவதற்கான ஒரு நெறிமுறை (protocol) ஆகும். இது RFC 4251 முதல் RFC 4254 வரையிலான ஆவணங்களில் வரையறுக்கப்பட்டுள்ளது. OpenSSH என்பது அனைவரும் பயன்படுத்தும் ஒரு அமலாக்கம் (implementation) ஆகும்: உங்கள் கணினியில் ssh client-ம், தொலைதூர கணினியில் sshd server-ம் செயல்படுகின்றன. இது telnet-க்கு மாற்றாக வந்தது; telnet கடவுச்சொற்கள் உள்ளிட்ட அனைத்துத் தரவுகளையும் பிணையத்தில் (network) எளிய உரையாக (plain text) அனுப்பியது.
SSH ஏன் port 22-ஐப் பயன்படுத்துகிறது?
IANA 1995-ல் SSH-க்கு port 22-ஐ ஒதுக்கியது. இது FTP (port 21) மற்றும் telnet (port 23) ஆகியவற்றுக்கு அடுத்தபடியாக அமைந்தது; இந்த நெறிமுறைகளை மாற்றவே SSH உருவாக்கப்பட்டது. இந்த எண்ணைப் பயன்படுத்த வேண்டிய கட்டாயம் ஏதுமில்லை: /etc/ssh/sshd_config-ல் உள்ள Port மூலம் server-ல் இதை மாற்றலாம், மேலும் ssh -p மூலம் client-ல் வேறு port-ஐத் தேர்ந்தெடுக்கலாம். 22 என்பது இயல்புநிலை (default) என்பதால், தானியங்கி ஸ்கேனர்கள் (automated scanners) தொடர்ந்து அதைத் தட்டிக்கொண்டே இருக்கும். இதனால்தான் புதிய server-ன் /var/log/auth.log கோப்பு Failed password for invalid user வரிகளால் நிரம்புகிறது. port-ஐ மாற்றுவது இந்தத் தேவையற்ற இரைச்சலைக் குறைக்குமே தவிர, உண்மையான பாதுகாப்பை வழங்காது.
host key மாறியதாக SSH எச்சரித்தால் நான் என்ன செய்ய வேண்டும்?
எதையும் நீக்குவதற்கு முன் அதற்கான காரணத்தைக் கண்டறியவும். பொதுவாக இது பாதிப்பில்லாத ஒரு விஷயமாகவே இருக்கும்: server மீண்டும் கட்டமைக்கப்பட்டிருக்கலாம் (rebuilt), அதனால் sshd புதிய host keys-ஐ உருவாக்கியிருக்கலாம், அல்லது பழைய IP முகவரி புதிய இயந்திரத்திற்கு ஒதுக்கப்பட்டிருக்கலாம். இயந்திரம் மீண்டும் கட்டமைக்கப்பட்டது உங்களுக்குத் தெரிந்தால், ssh-keygen -R <host> கட்டளையைப் பயன்படுத்தி சேமிக்கப்பட்ட key-ஐ நீக்கிவிட்டு, மீண்டும் இணைக்கவும். அப்போது காட்டப்படும் fingerprint-ஐ, உங்கள் provider console-ல் உள்ள fingerprint-உடன் ஒப்பிட்டுப் பார்க்கவும். உங்கள் தரப்பில் எந்த மாற்றமும் இல்லை என்றால், இணைப்பை ஏற்படுத்த வேண்டாம்; கடவுச்சொல்லை உள்ளிடவும் வேண்டாம். இந்த காரணத்திற்காகவே, இத்தகைய சூழலில் OpenSSH கடவுச்சொல் அங்கீகாரத்தை (password authentication) ஏற்கனவே மறுத்துவிடுகிறது.
SFTP மற்றும் scp ஆகியவை SSH-லிருந்து வேறுபட்டவையா?
இவை SSH-ன் மேல் இயங்குகின்றன. நீங்கள் அங்கீகரிக்கப்பட்ட பிறகு, SSH இணைப்பு பல சேனல்களைக் கொண்டு செல்ல முடியும்; shell என்பது அவற்றில் ஒன்று மட்டுமே. SFTP என்பது sshd-ன் sftp subsystem-ஐ அதே இணைப்பின் மூலம் பயன்படுத்தும் ஒரு கோப்பு பரிமாற்ற நெறிமுறை (file transfer protocol) ஆகும். OpenSSH 9.0 பதிப்பிலிருந்து scp உள்ளுக்குள் SFTP நெறிமுறையையே பயன்படுத்துகிறது. Port forwarding மற்றும் Git over SSH ஆகியவையும் அதே இணைப்பில் உள்ள சேனல்களே. இவை அனைத்தும் ஒரே port, ஒரே host key சரிபார்ப்பு மற்றும் ஒரே உள்நுழைவு முறையைப் பயன்படுத்துகின்றன. SFTP என்பது குறியாக்கம் சேர்க்கப்பட்ட FTP அல்ல என்பதை கவனத்தில் கொள்க; அது FTPS என்று அழைக்கப்படுகிறது, அது ஒரு தனி நெறிமுறை.
கடவுச்சொல்லை விட key authentication சிறந்ததா?
ஆம், இணையத்திலிருந்து அணுகக்கூடிய எந்தவொரு server-க்கும் இதுவே சிறந்தது. கடவுச்சொல் என்பது ஒவ்வொரு உள்நுழைவின் போதும் நீங்கள் server-க்கு வழங்கும் ஒரு குறுகிய ரகசியமாகும்; port 22-ஐ தானியங்கி client-கள் தொடர்ந்து ஊகித்துக் கொண்டே இருக்கும். ஒரு key pair-ஐப் பயன்படுத்தும்போது, private key உங்கள் கணினியை விட்டு வெளியேறாது: client தற்போதைய அமர்வுடன் தொடர்புடைய தரவை கையொப்பமிடுகிறது (signs), server அந்த கையொப்பத்தை ~/.ssh/authorized_keys-ல் உள்ள public key-உடன் ஒப்பிட்டுச் சரிபார்க்கிறது. பதிவு செய்யப்பட்ட ஒரு கையொப்பத்தை மற்றொரு server-க்கு எதிராக மீண்டும் பயன்படுத்த முடியாது (replay). Private key-ஐ ஒரு passphrase மூலம் பாதுகாக்கவும், ஏனெனில் passphrase இல்லாத key கோப்பு, அதை நகலெடுக்கும் எவருக்கும் ஒரு செல்லுபடியாகும் உள்நுழைவுத் திறவுகோலாக மாறிவிடும்.