Кўпчилик дастурчилар сайтни янгилаш учун ҳамон эски усулдан фойдаланади: файлни компьютерда таҳрирлайди, кейин FTP дастури орқали серверга юклайди ва натижани браузерда текширади. Бу жараён ҳар бир кичик ўзгариш учун бир неча қадамни талаб қилади ва қайси файл серверга юклангани, қайси бири юкланмай қолгани тез-тез чалкашиб кетади. VS Code'нинг Remote SSH кенгайтмаси бу муаммони бошқача ҳал қилади: муҳаррир сизнинг компьютерингизда очилади, лекин файллар, терминал ва қидирув тўғридан-тўғри серверда ишлайди. Натижада сиз сервердаги лойиҳани худди локал папкадек кўрасиз.
Remote SSH қандай ишлайди
Кенгайтма серверга оддий SSH орқали уланади ва биринчи уланишда фойдаланувчининг уй папкасига ~/.vscode-server номли кичик сервер қисмини ўрнатади. Кейин барча оғир ишлар, яъни файлларни ўқиш, матн бўйича қидириш, кенгайтмаларнинг бир қисми ва терминал сервернинг ўзида бажарилади, сизнинг компьютерингиз эса фақат интерфейсни чизади. Шунинг учун катта лойиҳада ҳам файлларни юклаб олиш керак бўлмайди ва сақлаш тугмасини босган заҳоти ўзгариш серверда бўлади. Бунинг нархи шундаки, сервер томонида қўшимча жараён ишлайди ва у бир неча юз мегабайт жой ҳамда маълум миқдорда оператив хотира эгаллайди.
Шу сабабли Remote SSH энг қулай тарзда VPS ёки ўзингиз бошқарадиган серверда ишлайди. Оддий shared хостингда SSH рухсати бўлса ҳам, узоқ вақт ишлаб турадиган фон жараёнлари ёки ресурс чекловлари туфайли уланиш узилиши мумкин. sayt.uz хостингида SSH имконияти тарифингизда борми ёки йўқлигини кабинетдан ёки техник ёрдам орқали аниқлаб олишингиз мумкин; VPS'да эса сиз тўлиқ root ҳуқуқига эга бўласиз ва бундай чекловлар бўлмайди.
SSH калит яратиш ва серверга қўшиш
Ҳар сафар парол киритиб уланиш ноқулай ва хавфсиз ҳам эмас, шунинг учун биринчи навбатда SSH калит жуфтлигини яратиш керак. Windows 10/11, macOS ва Linux'да ssh-keygen буйруғи тайёр ҳолда мавжуд. Қуйидаги буйруқ замонавий ed25519 туридаги калитни яратади; парол сўраганда калит учун алоҳида ҳимоя паролини (passphrase) қўйиш тавсия этилади.
ssh-keygen -t ed25519 -C "noutbuk-ofis"
# Natija: ~/.ssh/id_ed25519 (yopiq kalit) va ~/.ssh/id_ed25519.pub (ochiq kalit)
# Linux/macOS'da ochiq kalitni serverga yuborish:
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@203.0.113.10
Windows'да ssh-copy-id бўлмаслиги мумкин, бундай ҳолда .pub файлининг мазмунини сервердаги ~/.ssh/authorized_keys файлига қўлда қўшасиз. Муҳими, ёпиқ калит (id_ed25519) ҳеч қачон компьютерингиздан ташқарига чиқмаслиги керак: уни чатга, почтага ёки лойиҳа репозиториясига қўйиш серверни бошқа одамга топшириш билан баробар. Серверда папка ва файл ҳуқуқлари ҳам тўғри бўлиши шарт, акс ҳолда SSH калитни эътиборсиз қолдиради.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
~/.ssh/config файлини созлаш
Remote SSH уланиш маълумотларини стандарт SSH config файлидан олади, шунинг учун уни бир марта тўғри ёзиб қўйсангиз, кейин VS Code рўйхатидан серверни танлаш кифоя. Ҳар бир сервер учун қисқа ном берилади, IP манзил, фойдаланувчи, порт ва калит йўли кўрсатилади. Қуйидаги мисолда битта VPS ва битта хостинг аккаунти учун ёзувлар бор.
Host misol-vps
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval 60
Host misol-hosting
HostName example.uz
User s0123
Port 22
IdentityFile ~/.ssh/id_ed25519
ServerAliveInterval параметри ҳар 60 сонияда кичик сигнал юбориб туради ва узоқ вақт ҳеч нарса ёзмасангиз ҳам уланиш роутерлар томонидан узиб қўйилишининг олдини олади. Аввал оддий терминалда ssh misol-vps буйруғи билан уланишни текшириб кўринг: агар у ерда паролсиз кирсангиз, VS Code ҳам муаммосиз уланади.
VS Code'да уланиш
Кенгайтмалар бўлимидан Microsoft чиқарган "Remote - SSH" кенгайтмасини ўрнатинг. Сўнг чап пастки бурчакдаги яшил ёки кўк белгини босинг ёки F1 тугмаси билан буйруқлар ойнасини очиб "Remote-SSH: Connect to Host" ни танланг. Рўйхатда config файлидаги номлар пайдо бўлади; кераклисини танлагач, биринчи марта сервер операцион тизимини сўрайди ва сервер қисмини ўрнатади. Уланиш тайёр бўлгач "Open Folder" орқали лойиҳа папкасини, масалан /var/www/example.uz ёки хостингдаги сайт папкасини очасиз.
Шундан кейин Ctrl+` билан очиладиган терминал ҳам серверда ишлайди. Унда git status, composer install ёки php artisan migrate каби буйруқларни бажариш мумкин ва уларни алоҳида SSH ойнасига ўтмасдан қиласиз. Кенгайтмалар икки турга бўлинади: мавзу ва клавиатура каби интерфейс кенгайтмалари локал ишлайди, PHP ёки Python таҳлилчилари эса серверга алоҳида ўрнатилади, шунинг учун уланишдан кейин уларни "Install in SSH" тугмаси билан қайта ўрнатиш керак бўлиши мумкин.
Амалий мисол: Тошкентдаги клиника сайти
Тасаввур қилинг, Тошкентдаги кичик клиника учун Laravel'да ёзилган қабулга ёзилиш сайти VPS'да ишлайди ва дастурчи ҳар ҳафта жадвал саҳифасига ўзгартириш киритади. Илгари у файлни локал таҳрирлаб, FTP орқали юклар ва баъзан кеш тозалашни унутгани учун ўзгариш кўринмай қоларди. Remote SSH билан у misol-vps га уланади, керакли Blade шаблонини очиб тузатади, ўша ойнадаги терминалда php artisan view:clear буйруғини бажаради ва натижани дарҳол браузерда кўради. Хато чиқса, storage/logs/laravel.log файлини ҳам шу муҳаррирда очиб, қидирув билан керакли қаторни топади.
Жонли серверда ишлаш хавфлари
Remote SSH қулайлиги бир вақтнинг ўзида хавф ҳам туғдиради: сақлаш тугмаси босилиши билан ўзгариш ишлаб турган сайтга тушади ва тасодифий хато бутун сайтни тўхтатиши мумкин. Шунинг учун қуйидаги қоидаларга амал қилиш фойдали:
- Лойиҳани Git остида сақланг ва ҳар бир ўзгаришдан кейин коммит қилинг, шунда нотўғри таҳрирни бир буйруқ билан қайтариш мумкин бўлади.
- Катта ўзгаришларни аввал staging нусхада (масалан,
test.example.uz) синаб кўринг, жонли сайтда фақат майда тузатишларни қилинг. - Root фойдаланувчиси билан уланманг; сайт файлларига эгалик қиладиган алоҳида фойдаланувчи ишлатинг, шунда хато буйруқ тизим файлларига тегмайди.
- Иш тугагач ойнани ёпинг: очиқ қолган сессия сервер қисмини фон режимида ушлаб туради ва ресурс сарфлайди.
Тез-тез учрайдиган муаммолар
Агар уланиш "Permission denied (publickey)" хатоси билан тўхтаса, одатда калит серверга қўшилмаган ёки authorized_keys файлининг ҳуқуқлари нотўғри бўлади. Уланиш узоқ "Setting up SSH host" босқичида қотиб қолса, серверда диск жойи тугаган ёки чиқувчи интернет чекланган бўлиши мумкин, чунки сервер қисми биринчи марта юклаб олинади. Бундай ҳолларда чап панелдаги "Output" ойнасида "Remote - SSH" журналини очиб, аниқ хато матнини кўриш энг тез йўл ҳисобланади. Муаммо сервернинг ўзида бўлса, эски ~/.vscode-server папкасини ўчириб қайта уланиш кўпинча ёрдам беради.