[{"data":1,"prerenderedAt":1484},["ShallowReactive",2],{"content-query-fYreGAMxXH":3},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"body":10,"_type":1478,"_id":1479,"_source":1480,"_file":1481,"_stem":1482,"_extension":1483},"\u002Fdocs\u002Ffeatures\u002Fcoder-ssh","features",false,"","Coder SSH","Use your local editor with Coder workspaces",{"type":11,"children":12,"toc":1433},"root",[13,21,27,34,41,66,72,95,101,119,125,131,149,155,180,190,196,280,293,299,305,361,367,450,456,532,538,544,549,567,575,581,586,632,637,655,661,667,672,695,815,821,826,872,878,884,889,1033,1038,1044,1049,1106,1111,1117,1122,1130,1136,1142,1150,1156,1164,1170,1175,1193,1199,1205,1228,1234,1257,1263,1286,1292,1298,1336,1342,1384,1390,1427],{"type":14,"tag":15,"props":16,"children":18},"element","h1",{"id":17},"coder-ssh",[19],{"type":20,"value":8},"text",{"type":14,"tag":22,"props":23,"children":24},"p",{},[25],{"type":20,"value":26},"Connect your local editor (VS Code, IDE, etc.) to your Coder workspace via SSH.",{"type":14,"tag":28,"props":29,"children":31},"h2",{"id":30},"why-use-ssh",[32],{"type":20,"value":33},"Why Use SSH?",{"type":14,"tag":35,"props":36,"children":38},"h3",{"id":37},"browser-ide-benefits",[39],{"type":20,"value":40},"Browser IDE Benefits",{"type":14,"tag":42,"props":43,"children":44},"ul",{},[45,51,56,61],{"type":14,"tag":46,"props":47,"children":48},"li",{},[49],{"type":20,"value":50},"Access from anywhere",{"type":14,"tag":46,"props":52,"children":53},{},[54],{"type":20,"value":55},"No setup needed",{"type":14,"tag":46,"props":57,"children":58},{},[59],{"type":20,"value":60},"Works on any device",{"type":14,"tag":46,"props":62,"children":63},{},[64],{"type":20,"value":65},"Keyboard shortcuts work",{"type":14,"tag":35,"props":67,"children":69},{"id":68},"local-ide-benefits",[70],{"type":20,"value":71},"Local IDE Benefits",{"type":14,"tag":42,"props":73,"children":74},{},[75,80,85,90],{"type":14,"tag":46,"props":76,"children":77},{},[78],{"type":20,"value":79},"Your favorite editor",{"type":14,"tag":46,"props":81,"children":82},{},[83],{"type":20,"value":84},"Your keybindings",{"type":14,"tag":46,"props":86,"children":87},{},[88],{"type":20,"value":89},"Your plugins\u002Fextensions",{"type":14,"tag":46,"props":91,"children":92},{},[93],{"type":20,"value":94},"Better performance for large projects",{"type":14,"tag":35,"props":96,"children":98},{"id":97},"solution-ssh-access",[99],{"type":20,"value":100},"Solution: SSH Access",{"type":14,"tag":42,"props":102,"children":103},{},[104,109,114],{"type":14,"tag":46,"props":105,"children":106},{},[107],{"type":20,"value":108},"Keep workspace in cloud",{"type":14,"tag":46,"props":110,"children":111},{},[112],{"type":20,"value":113},"Use local editor",{"type":14,"tag":46,"props":115,"children":116},{},[117],{"type":20,"value":118},"Best of both worlds!",{"type":14,"tag":28,"props":120,"children":122},{"id":121},"setup-ssh-connection",[123],{"type":20,"value":124},"Setup SSH Connection",{"type":14,"tag":35,"props":126,"children":128},{"id":127},"prerequisites",[129],{"type":20,"value":130},"Prerequisites",{"type":14,"tag":42,"props":132,"children":133},{},[134,139,144],{"type":14,"tag":46,"props":135,"children":136},{},[137],{"type":20,"value":138},"SSH client (installed by default on Mac\u002FLinux)",{"type":14,"tag":46,"props":140,"children":141},{},[142],{"type":20,"value":143},"Windows: Install OpenSSH or Git Bash",{"type":14,"tag":46,"props":145,"children":146},{},[147],{"type":20,"value":148},"Local IDE that supports SSH (VS Code, JetBrains, etc.)",{"type":14,"tag":35,"props":150,"children":152},{"id":151},"get-ssh-info",[153],{"type":20,"value":154},"Get SSH Info",{"type":14,"tag":156,"props":157,"children":158},"ol",{},[159,164,175],{"type":14,"tag":46,"props":160,"children":161},{},[162],{"type":20,"value":163},"Click workspace",{"type":14,"tag":46,"props":165,"children":166},{},[167,169],{"type":20,"value":168},"Click ",{"type":14,"tag":170,"props":171,"children":172},"strong",{},[173],{"type":20,"value":174},"Connect",{"type":14,"tag":46,"props":176,"children":177},{},[178],{"type":20,"value":179},"See SSH connection string:",{"type":14,"tag":181,"props":182,"children":184},"pre",{"code":183},"ssh coder@workspace-name.coder.mycompany.com\n",[185],{"type":14,"tag":186,"props":187,"children":188},"code",{"__ignoreMap":7},[189],{"type":20,"value":183},{"type":14,"tag":35,"props":191,"children":193},{"id":192},"test-connection",[194],{"type":20,"value":195},"Test Connection",{"type":14,"tag":181,"props":197,"children":201},{"code":198,"language":199,"meta":7,"className":200,"style":7},"# Test SSH works\nssh coder@workspace-name.coder.mycompany.com\n\n# If successful, you see:\nWelcome to workspace-name!\ncoder@workspace-name:~$\n","bash","language-bash shiki shiki-themes github-dark",[202],{"type":14,"tag":186,"props":203,"children":204},{"__ignoreMap":7},[205,217,233,243,252,271],{"type":14,"tag":206,"props":207,"children":210},"span",{"class":208,"line":209},"line",1,[211],{"type":14,"tag":206,"props":212,"children":214},{"style":213},"--shiki-default:#6A737D",[215],{"type":20,"value":216},"# Test SSH works\n",{"type":14,"tag":206,"props":218,"children":220},{"class":208,"line":219},2,[221,227],{"type":14,"tag":206,"props":222,"children":224},{"style":223},"--shiki-default:#B392F0",[225],{"type":20,"value":226},"ssh",{"type":14,"tag":206,"props":228,"children":230},{"style":229},"--shiki-default:#9ECBFF",[231],{"type":20,"value":232}," coder@workspace-name.coder.mycompany.com\n",{"type":14,"tag":206,"props":234,"children":236},{"class":208,"line":235},3,[237],{"type":14,"tag":206,"props":238,"children":240},{"emptyLinePlaceholder":239},true,[241],{"type":20,"value":242},"\n",{"type":14,"tag":206,"props":244,"children":246},{"class":208,"line":245},4,[247],{"type":14,"tag":206,"props":248,"children":249},{"style":213},[250],{"type":20,"value":251},"# If successful, you see:\n",{"type":14,"tag":206,"props":253,"children":255},{"class":208,"line":254},5,[256,261,266],{"type":14,"tag":206,"props":257,"children":258},{"style":223},[259],{"type":20,"value":260},"Welcome",{"type":14,"tag":206,"props":262,"children":263},{"style":229},[264],{"type":20,"value":265}," to",{"type":14,"tag":206,"props":267,"children":268},{"style":229},[269],{"type":20,"value":270}," workspace-name!\n",{"type":14,"tag":206,"props":272,"children":274},{"class":208,"line":273},6,[275],{"type":14,"tag":206,"props":276,"children":277},{"style":223},[278],{"type":20,"value":279},"coder@workspace-name:~$\n",{"type":14,"tag":22,"props":281,"children":282},{},[283,285,291],{"type":20,"value":284},"Type ",{"type":14,"tag":186,"props":286,"children":288},{"className":287},[],[289],{"type":20,"value":290},"exit",{"type":20,"value":292}," to disconnect.",{"type":14,"tag":28,"props":294,"children":296},{"id":295},"using-local-editor",[297],{"type":20,"value":298},"Using Local Editor",{"type":14,"tag":35,"props":300,"children":302},{"id":301},"vs-code-remote-ssh",[303],{"type":20,"value":304},"VS Code Remote SSH",{"type":14,"tag":156,"props":306,"children":307},{},[308,313,318,323,336,341,346,351,356],{"type":14,"tag":46,"props":309,"children":310},{},[311],{"type":20,"value":312},"Install extension: \"Remote - SSH\"",{"type":14,"tag":46,"props":314,"children":315},{},[316],{"type":20,"value":317},"Click Remote icon (bottom left)",{"type":14,"tag":46,"props":319,"children":320},{},[321],{"type":20,"value":322},"Click \"Connect to Host\"",{"type":14,"tag":46,"props":324,"children":325},{},[326,328],{"type":20,"value":327},"Enter SSH command:\n",{"type":14,"tag":181,"props":329,"children":331},{"code":330},"coder@workspace-name.coder.mycompany.com\n",[332],{"type":14,"tag":186,"props":333,"children":334},{"__ignoreMap":7},[335],{"type":20,"value":330},{"type":14,"tag":46,"props":337,"children":338},{},[339],{"type":20,"value":340},"Choose platform (Linux)",{"type":14,"tag":46,"props":342,"children":343},{},[344],{"type":20,"value":345},"Wait for connection (30 seconds)",{"type":14,"tag":46,"props":347,"children":348},{},[349],{"type":20,"value":350},"Window connects to workspace",{"type":14,"tag":46,"props":352,"children":353},{},[354],{"type":20,"value":355},"Open folders in workspace",{"type":14,"tag":46,"props":357,"children":358},{},[359],{"type":20,"value":360},"Use as if local!",{"type":14,"tag":35,"props":362,"children":364},{"id":363},"jetbrains-ides-webstorm-pycharm-etc",[365],{"type":20,"value":366},"JetBrains IDEs (WebStorm, PyCharm, etc.)",{"type":14,"tag":156,"props":368,"children":369},{},[370,380,391,396,426,437,445],{"type":14,"tag":46,"props":371,"children":372},{},[373,375],{"type":20,"value":374},"Go to ",{"type":14,"tag":170,"props":376,"children":377},{},[378],{"type":20,"value":379},"Tools → Deployment → Configuration",{"type":14,"tag":46,"props":381,"children":382},{},[383,384,389],{"type":20,"value":168},{"type":14,"tag":170,"props":385,"children":386},{},[387],{"type":20,"value":388},"+",{"type":20,"value":390}," to add",{"type":14,"tag":46,"props":392,"children":393},{},[394],{"type":20,"value":395},"Choose SFTP",{"type":14,"tag":46,"props":397,"children":398},{},[399,401],{"type":20,"value":400},"Enter SSH host info:\n",{"type":14,"tag":42,"props":402,"children":403},{},[404,415],{"type":14,"tag":46,"props":405,"children":406},{},[407,409],{"type":20,"value":408},"Host: ",{"type":14,"tag":186,"props":410,"children":412},{"className":411},[],[413],{"type":20,"value":414},"workspace-name.coder.mycompany.com",{"type":14,"tag":46,"props":416,"children":417},{},[418,420],{"type":20,"value":419},"Username: ",{"type":14,"tag":186,"props":421,"children":423},{"className":422},[],[424],{"type":20,"value":425},"coder",{"type":14,"tag":46,"props":427,"children":428},{},[429,431],{"type":20,"value":430},"Set Root path: ",{"type":14,"tag":186,"props":432,"children":434},{"className":433},[],[435],{"type":20,"value":436},"\u002Fhome\u002Fcoder",{"type":14,"tag":46,"props":438,"children":439},{},[440,441],{"type":20,"value":168},{"type":14,"tag":170,"props":442,"children":443},{},[444],{"type":20,"value":195},{"type":14,"tag":46,"props":446,"children":447},{},[448],{"type":20,"value":449},"Deploy and work remotely",{"type":14,"tag":35,"props":451,"children":453},{"id":452},"terminal-ssh",[454],{"type":20,"value":455},"Terminal SSH",{"type":14,"tag":156,"props":457,"children":458},{},[459,464,486],{"type":14,"tag":46,"props":460,"children":461},{},[462],{"type":20,"value":463},"Open terminal",{"type":14,"tag":46,"props":465,"children":466},{},[467,469],{"type":20,"value":468},"SSH to workspace:\n",{"type":14,"tag":181,"props":470,"children":471},{"code":183,"language":199,"meta":7,"className":200,"style":7},[472],{"type":14,"tag":186,"props":473,"children":474},{"__ignoreMap":7},[475],{"type":14,"tag":206,"props":476,"children":477},{"class":208,"line":209},[478,482],{"type":14,"tag":206,"props":479,"children":480},{"style":223},[481],{"type":20,"value":226},{"type":14,"tag":206,"props":483,"children":484},{"style":229},[485],{"type":20,"value":232},{"type":14,"tag":46,"props":487,"children":488},{},[489,491],{"type":20,"value":490},"Now have terminal in workspace:\n",{"type":14,"tag":181,"props":492,"children":494},{"code":493,"language":199,"meta":7,"className":200,"style":7},"$ npm install\n$ npm start\n",[495],{"type":14,"tag":186,"props":496,"children":497},{"__ignoreMap":7},[498,516],{"type":14,"tag":206,"props":499,"children":500},{"class":208,"line":209},[501,506,511],{"type":14,"tag":206,"props":502,"children":503},{"style":223},[504],{"type":20,"value":505},"$",{"type":14,"tag":206,"props":507,"children":508},{"style":229},[509],{"type":20,"value":510}," npm",{"type":14,"tag":206,"props":512,"children":513},{"style":229},[514],{"type":20,"value":515}," install\n",{"type":14,"tag":206,"props":517,"children":518},{"class":208,"line":219},[519,523,527],{"type":14,"tag":206,"props":520,"children":521},{"style":223},[522],{"type":20,"value":505},{"type":14,"tag":206,"props":524,"children":525},{"style":229},[526],{"type":20,"value":510},{"type":14,"tag":206,"props":528,"children":529},{"style":229},[530],{"type":20,"value":531}," start\n",{"type":14,"tag":28,"props":533,"children":535},{"id":534},"editing-files-locally",[536],{"type":20,"value":537},"Editing Files Locally",{"type":14,"tag":35,"props":539,"children":541},{"id":540},"file-sync",[542],{"type":20,"value":543},"File Sync",{"type":14,"tag":22,"props":545,"children":546},{},[547],{"type":20,"value":548},"When using SSH:",{"type":14,"tag":42,"props":550,"children":551},{},[552,557,562],{"type":14,"tag":46,"props":553,"children":554},{},[555],{"type":20,"value":556},"Edit locally in your IDE",{"type":14,"tag":46,"props":558,"children":559},{},[560],{"type":20,"value":561},"Changes sync to workspace",{"type":14,"tag":46,"props":563,"children":564},{},[565],{"type":20,"value":566},"Instantly available in workspace",{"type":14,"tag":181,"props":568,"children":570},{"code":569},"Local: edit main.js\n    ↓ (sync via SSH)\nWorkspace: main.js updated\n    ↓\nnpm start picks up change\n",[571],{"type":14,"tag":186,"props":572,"children":573},{"__ignoreMap":7},[574],{"type":20,"value":569},{"type":14,"tag":35,"props":576,"children":578},{"id":577},"port-forwarding",[579],{"type":20,"value":580},"Port Forwarding",{"type":14,"tag":22,"props":582,"children":583},{},[584],{"type":20,"value":585},"Work with services running in workspace:",{"type":14,"tag":181,"props":587,"children":589},{"code":588,"language":199,"meta":7,"className":200,"style":7},"# In workspace, API running on localhost:3000\n# From your machine, access via:\nhttp:\u002F\u002Flocalhost:3000\n\n# SSH automatically forwards!\n",[590],{"type":14,"tag":186,"props":591,"children":592},{"__ignoreMap":7},[593,601,609,617,624],{"type":14,"tag":206,"props":594,"children":595},{"class":208,"line":209},[596],{"type":14,"tag":206,"props":597,"children":598},{"style":213},[599],{"type":20,"value":600},"# In workspace, API running on localhost:3000\n",{"type":14,"tag":206,"props":602,"children":603},{"class":208,"line":219},[604],{"type":14,"tag":206,"props":605,"children":606},{"style":213},[607],{"type":20,"value":608},"# From your machine, access via:\n",{"type":14,"tag":206,"props":610,"children":611},{"class":208,"line":235},[612],{"type":14,"tag":206,"props":613,"children":614},{"style":223},[615],{"type":20,"value":616},"http:\u002F\u002Flocalhost:3000\n",{"type":14,"tag":206,"props":618,"children":619},{"class":208,"line":245},[620],{"type":14,"tag":206,"props":621,"children":622},{"emptyLinePlaceholder":239},[623],{"type":20,"value":242},{"type":14,"tag":206,"props":625,"children":626},{"class":208,"line":254},[627],{"type":14,"tag":206,"props":628,"children":629},{"style":213},[630],{"type":20,"value":631},"# SSH automatically forwards!\n",{"type":14,"tag":22,"props":633,"children":634},{},[635],{"type":20,"value":636},"Ports automatically forwarded:",{"type":14,"tag":42,"props":638,"children":639},{},[640,645,650],{"type":14,"tag":46,"props":641,"children":642},{},[643],{"type":20,"value":644},"localhost:3000 → workspace:3000",{"type":14,"tag":46,"props":646,"children":647},{},[648],{"type":20,"value":649},"localhost:5432 → workspace:5432",{"type":14,"tag":46,"props":651,"children":652},{},[653],{"type":20,"value":654},"Any port!",{"type":14,"tag":28,"props":656,"children":658},{"id":657},"terminal-usage",[659],{"type":20,"value":660},"Terminal Usage",{"type":14,"tag":35,"props":662,"children":664},{"id":663},"ssh-terminal-in-ide",[665],{"type":20,"value":666},"SSH Terminal in IDE",{"type":14,"tag":22,"props":668,"children":669},{},[670],{"type":20,"value":671},"VS Code Remote terminal:",{"type":14,"tag":42,"props":673,"children":674},{},[675,680,685,690],{"type":14,"tag":46,"props":676,"children":677},{},[678],{"type":20,"value":679},"Run commands in workspace",{"type":14,"tag":46,"props":681,"children":682},{},[683],{"type":20,"value":684},"See output live",{"type":14,"tag":46,"props":686,"children":687},{},[688],{"type":20,"value":689},"Tab completion",{"type":14,"tag":46,"props":691,"children":692},{},[693],{"type":20,"value":694},"File paths work",{"type":14,"tag":181,"props":696,"children":698},{"code":697,"language":199,"meta":7,"className":200,"style":7},"coder@workspace:~\u002Fproject$ npm test\nPASS  src\u002Findex.test.js\n  ✓ Loads data correctly\n  ✓ Calculates sum\n  ✓ Handles errors\n\n2 tests passed\n",[699],{"type":14,"tag":186,"props":700,"children":701},{"__ignoreMap":7},[702,719,732,755,772,789,796],{"type":14,"tag":206,"props":703,"children":704},{"class":208,"line":209},[705,710,714],{"type":14,"tag":206,"props":706,"children":707},{"style":223},[708],{"type":20,"value":709},"coder@workspace:~\u002Fproject$",{"type":14,"tag":206,"props":711,"children":712},{"style":229},[713],{"type":20,"value":510},{"type":14,"tag":206,"props":715,"children":716},{"style":229},[717],{"type":20,"value":718}," test\n",{"type":14,"tag":206,"props":720,"children":721},{"class":208,"line":219},[722,727],{"type":14,"tag":206,"props":723,"children":724},{"style":223},[725],{"type":20,"value":726},"PASS",{"type":14,"tag":206,"props":728,"children":729},{"style":229},[730],{"type":20,"value":731},"  src\u002Findex.test.js\n",{"type":14,"tag":206,"props":733,"children":734},{"class":208,"line":235},[735,740,745,750],{"type":14,"tag":206,"props":736,"children":737},{"style":223},[738],{"type":20,"value":739},"  ✓",{"type":14,"tag":206,"props":741,"children":742},{"style":229},[743],{"type":20,"value":744}," Loads",{"type":14,"tag":206,"props":746,"children":747},{"style":229},[748],{"type":20,"value":749}," data",{"type":14,"tag":206,"props":751,"children":752},{"style":229},[753],{"type":20,"value":754}," correctly\n",{"type":14,"tag":206,"props":756,"children":757},{"class":208,"line":245},[758,762,767],{"type":14,"tag":206,"props":759,"children":760},{"style":223},[761],{"type":20,"value":739},{"type":14,"tag":206,"props":763,"children":764},{"style":229},[765],{"type":20,"value":766}," Calculates",{"type":14,"tag":206,"props":768,"children":769},{"style":229},[770],{"type":20,"value":771}," sum\n",{"type":14,"tag":206,"props":773,"children":774},{"class":208,"line":254},[775,779,784],{"type":14,"tag":206,"props":776,"children":777},{"style":223},[778],{"type":20,"value":739},{"type":14,"tag":206,"props":780,"children":781},{"style":229},[782],{"type":20,"value":783}," Handles",{"type":14,"tag":206,"props":785,"children":786},{"style":229},[787],{"type":20,"value":788}," errors\n",{"type":14,"tag":206,"props":790,"children":791},{"class":208,"line":273},[792],{"type":14,"tag":206,"props":793,"children":794},{"emptyLinePlaceholder":239},[795],{"type":20,"value":242},{"type":14,"tag":206,"props":797,"children":799},{"class":208,"line":798},7,[800,805,810],{"type":14,"tag":206,"props":801,"children":802},{"style":223},[803],{"type":20,"value":804},"2",{"type":14,"tag":206,"props":806,"children":807},{"style":229},[808],{"type":20,"value":809}," tests",{"type":14,"tag":206,"props":811,"children":812},{"style":229},[813],{"type":20,"value":814}," passed\n",{"type":14,"tag":35,"props":816,"children":818},{"id":817},"multiple-terminal-tabs",[819],{"type":20,"value":820},"Multiple Terminal Tabs",{"type":14,"tag":22,"props":822,"children":823},{},[824],{"type":20,"value":825},"Open multiple terminals:",{"type":14,"tag":42,"props":827,"children":828},{},[829,840,851,862,867],{"type":14,"tag":46,"props":830,"children":831},{},[832,834],{"type":20,"value":833},"Tab 1: ",{"type":14,"tag":186,"props":835,"children":837},{"className":836},[],[838],{"type":20,"value":839},"npm start",{"type":14,"tag":46,"props":841,"children":842},{},[843,845],{"type":20,"value":844},"Tab 2: ",{"type":14,"tag":186,"props":846,"children":848},{"className":847},[],[849],{"type":20,"value":850},"npm test --watch",{"type":14,"tag":46,"props":852,"children":853},{},[854,856],{"type":20,"value":855},"Tab 3: ",{"type":14,"tag":186,"props":857,"children":859},{"className":858},[],[860],{"type":20,"value":861},"git status",{"type":14,"tag":46,"props":863,"children":864},{},[865],{"type":20,"value":866},"Each runs in workspace",{"type":14,"tag":46,"props":868,"children":869},{},[870],{"type":20,"value":871},"All visible on your machine",{"type":14,"tag":28,"props":873,"children":875},{"id":874},"advanced-usage",[876],{"type":20,"value":877},"Advanced Usage",{"type":14,"tag":35,"props":879,"children":881},{"id":880},"git-operations",[882],{"type":20,"value":883},"Git Operations",{"type":14,"tag":22,"props":885,"children":886},{},[887],{"type":20,"value":888},"Git works over SSH:",{"type":14,"tag":181,"props":890,"children":892},{"code":891,"language":199,"meta":7,"className":200,"style":7},"# In local editor terminal via SSH\n\n# Clone repo\ngit clone https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo.git\n\n# Make changes\ngit add .\ngit commit -m \"Feature: new feature\"\n\n# Push\ngit push origin main\n",[893],{"type":14,"tag":186,"props":894,"children":895},{"__ignoreMap":7},[896,904,911,919,937,944,952,969,993,1001,1010],{"type":14,"tag":206,"props":897,"children":898},{"class":208,"line":209},[899],{"type":14,"tag":206,"props":900,"children":901},{"style":213},[902],{"type":20,"value":903},"# In local editor terminal via SSH\n",{"type":14,"tag":206,"props":905,"children":906},{"class":208,"line":219},[907],{"type":14,"tag":206,"props":908,"children":909},{"emptyLinePlaceholder":239},[910],{"type":20,"value":242},{"type":14,"tag":206,"props":912,"children":913},{"class":208,"line":235},[914],{"type":14,"tag":206,"props":915,"children":916},{"style":213},[917],{"type":20,"value":918},"# Clone repo\n",{"type":14,"tag":206,"props":920,"children":921},{"class":208,"line":245},[922,927,932],{"type":14,"tag":206,"props":923,"children":924},{"style":223},[925],{"type":20,"value":926},"git",{"type":14,"tag":206,"props":928,"children":929},{"style":229},[930],{"type":20,"value":931}," clone",{"type":14,"tag":206,"props":933,"children":934},{"style":229},[935],{"type":20,"value":936}," https:\u002F\u002Fgithub.com\u002Fuser\u002Frepo.git\n",{"type":14,"tag":206,"props":938,"children":939},{"class":208,"line":254},[940],{"type":14,"tag":206,"props":941,"children":942},{"emptyLinePlaceholder":239},[943],{"type":20,"value":242},{"type":14,"tag":206,"props":945,"children":946},{"class":208,"line":273},[947],{"type":14,"tag":206,"props":948,"children":949},{"style":213},[950],{"type":20,"value":951},"# Make changes\n",{"type":14,"tag":206,"props":953,"children":954},{"class":208,"line":798},[955,959,964],{"type":14,"tag":206,"props":956,"children":957},{"style":223},[958],{"type":20,"value":926},{"type":14,"tag":206,"props":960,"children":961},{"style":229},[962],{"type":20,"value":963}," add",{"type":14,"tag":206,"props":965,"children":966},{"style":229},[967],{"type":20,"value":968}," .\n",{"type":14,"tag":206,"props":970,"children":972},{"class":208,"line":971},8,[973,977,982,988],{"type":14,"tag":206,"props":974,"children":975},{"style":223},[976],{"type":20,"value":926},{"type":14,"tag":206,"props":978,"children":979},{"style":229},[980],{"type":20,"value":981}," commit",{"type":14,"tag":206,"props":983,"children":985},{"style":984},"--shiki-default:#79B8FF",[986],{"type":20,"value":987}," -m",{"type":14,"tag":206,"props":989,"children":990},{"style":229},[991],{"type":20,"value":992}," \"Feature: new feature\"\n",{"type":14,"tag":206,"props":994,"children":996},{"class":208,"line":995},9,[997],{"type":14,"tag":206,"props":998,"children":999},{"emptyLinePlaceholder":239},[1000],{"type":20,"value":242},{"type":14,"tag":206,"props":1002,"children":1004},{"class":208,"line":1003},10,[1005],{"type":14,"tag":206,"props":1006,"children":1007},{"style":213},[1008],{"type":20,"value":1009},"# Push\n",{"type":14,"tag":206,"props":1011,"children":1013},{"class":208,"line":1012},11,[1014,1018,1023,1028],{"type":14,"tag":206,"props":1015,"children":1016},{"style":223},[1017],{"type":20,"value":926},{"type":14,"tag":206,"props":1019,"children":1020},{"style":229},[1021],{"type":20,"value":1022}," push",{"type":14,"tag":206,"props":1024,"children":1025},{"style":229},[1026],{"type":20,"value":1027}," origin",{"type":14,"tag":206,"props":1029,"children":1030},{"style":229},[1031],{"type":20,"value":1032}," main\n",{"type":14,"tag":22,"props":1034,"children":1035},{},[1036],{"type":20,"value":1037},"All git operations use workspace environment.",{"type":14,"tag":35,"props":1039,"children":1041},{"id":1040},"debugging",[1042],{"type":20,"value":1043},"Debugging",{"type":14,"tag":22,"props":1045,"children":1046},{},[1047],{"type":20,"value":1048},"Use debugger in local IDE:",{"type":14,"tag":181,"props":1050,"children":1054},{"code":1051,"language":1052,"meta":7,"className":1053,"style":7},"\u002F\u002F In VS Code\n\u002F\u002F Set breakpoint in main.js line 10\n\u002F\u002F Run: npm start\n\u002F\u002F Workspace code runs\n\u002F\u002F Breakpoint hits\n\u002F\u002F Step through in VS Code\n","javascript","language-javascript shiki shiki-themes github-dark",[1055],{"type":14,"tag":186,"props":1056,"children":1057},{"__ignoreMap":7},[1058,1066,1074,1082,1090,1098],{"type":14,"tag":206,"props":1059,"children":1060},{"class":208,"line":209},[1061],{"type":14,"tag":206,"props":1062,"children":1063},{"style":213},[1064],{"type":20,"value":1065},"\u002F\u002F In VS Code\n",{"type":14,"tag":206,"props":1067,"children":1068},{"class":208,"line":219},[1069],{"type":14,"tag":206,"props":1070,"children":1071},{"style":213},[1072],{"type":20,"value":1073},"\u002F\u002F Set breakpoint in main.js line 10\n",{"type":14,"tag":206,"props":1075,"children":1076},{"class":208,"line":235},[1077],{"type":14,"tag":206,"props":1078,"children":1079},{"style":213},[1080],{"type":20,"value":1081},"\u002F\u002F Run: npm start\n",{"type":14,"tag":206,"props":1083,"children":1084},{"class":208,"line":245},[1085],{"type":14,"tag":206,"props":1086,"children":1087},{"style":213},[1088],{"type":20,"value":1089},"\u002F\u002F Workspace code runs\n",{"type":14,"tag":206,"props":1091,"children":1092},{"class":208,"line":254},[1093],{"type":14,"tag":206,"props":1094,"children":1095},{"style":213},[1096],{"type":20,"value":1097},"\u002F\u002F Breakpoint hits\n",{"type":14,"tag":206,"props":1099,"children":1100},{"class":208,"line":273},[1101],{"type":14,"tag":206,"props":1102,"children":1103},{"style":213},[1104],{"type":20,"value":1105},"\u002F\u002F Step through in VS Code\n",{"type":14,"tag":22,"props":1107,"children":1108},{},[1109],{"type":20,"value":1110},"Debugger works across SSH!",{"type":14,"tag":35,"props":1112,"children":1114},{"id":1113},"extensions",[1115],{"type":20,"value":1116},"Extensions",{"type":14,"tag":22,"props":1118,"children":1119},{},[1120],{"type":20,"value":1121},"VS Code extensions work:",{"type":14,"tag":181,"props":1123,"children":1125},{"code":1124},"Remote SSH installs extensions on workspace\nESLint, Prettier, Python, Docker, etc.\n\nEdit locally → Extensions run in workspace\nLinting happens in workspace (correct environment)\n",[1126],{"type":14,"tag":186,"props":1127,"children":1128},{"__ignoreMap":7},[1129],{"type":20,"value":1124},{"type":14,"tag":28,"props":1131,"children":1133},{"id":1132},"connection-troubleshooting",[1134],{"type":20,"value":1135},"Connection Troubleshooting",{"type":14,"tag":35,"props":1137,"children":1139},{"id":1138},"cant-connect",[1140],{"type":20,"value":1141},"Can't Connect",{"type":14,"tag":181,"props":1143,"children":1145},{"code":1144},"Error: \"Connection refused\"\n\nFixes:\n1. Workspace is running? Check status\n2. Correct workspace name? Copy from Share\n3. SSH installed? Run: ssh -V\n4. Firewall? Check if port 22 open\n",[1146],{"type":14,"tag":186,"props":1147,"children":1148},{"__ignoreMap":7},[1149],{"type":20,"value":1144},{"type":14,"tag":35,"props":1151,"children":1153},{"id":1152},"slow-connection",[1154],{"type":20,"value":1155},"Slow Connection",{"type":14,"tag":181,"props":1157,"children":1159},{"code":1158},"Slow file sync?\n- Check internet speed\n- Try wired connection\n- Close browser tabs (less bandwidth)\n- Use git batch for large file transfers\n",[1160],{"type":14,"tag":186,"props":1161,"children":1162},{"__ignoreMap":7},[1163],{"type":20,"value":1158},{"type":14,"tag":35,"props":1165,"children":1167},{"id":1166},"keys-and-authentication",[1168],{"type":20,"value":1169},"Keys and Authentication",{"type":14,"tag":22,"props":1171,"children":1172},{},[1173],{"type":20,"value":1174},"SSH uses Coder keys, handled automatically:",{"type":14,"tag":42,"props":1176,"children":1177},{},[1178,1183,1188],{"type":14,"tag":46,"props":1179,"children":1180},{},[1181],{"type":20,"value":1182},"First connection: No password needed",{"type":14,"tag":46,"props":1184,"children":1185},{},[1186],{"type":20,"value":1187},"Keys stored securely",{"type":14,"tag":46,"props":1189,"children":1190},{},[1191],{"type":20,"value":1192},"Can regenerate if issues",{"type":14,"tag":28,"props":1194,"children":1196},{"id":1195},"best-practices",[1197],{"type":20,"value":1198},"Best Practices",{"type":14,"tag":35,"props":1200,"children":1202},{"id":1201},"performance",[1203],{"type":20,"value":1204},"Performance",{"type":14,"tag":42,"props":1206,"children":1207},{},[1208,1213,1218,1223],{"type":14,"tag":46,"props":1209,"children":1210},{},[1211],{"type":20,"value":1212},"Use latest SSH client",{"type":14,"tag":46,"props":1214,"children":1215},{},[1216],{"type":20,"value":1217},"Close unused connections",{"type":14,"tag":46,"props":1219,"children":1220},{},[1221],{"type":20,"value":1222},"Use wired internet when possible",{"type":14,"tag":46,"props":1224,"children":1225},{},[1226],{"type":20,"value":1227},"Avoid very large files over SSH",{"type":14,"tag":35,"props":1229,"children":1231},{"id":1230},"workflow",[1232],{"type":20,"value":1233},"Workflow",{"type":14,"tag":42,"props":1235,"children":1236},{},[1237,1242,1247,1252],{"type":14,"tag":46,"props":1238,"children":1239},{},[1240],{"type":20,"value":1241},"Use browser IDE for demos",{"type":14,"tag":46,"props":1243,"children":1244},{},[1245],{"type":20,"value":1246},"Use SSH for local development",{"type":14,"tag":46,"props":1248,"children":1249},{},[1250],{"type":20,"value":1251},"Git commit often",{"type":14,"tag":46,"props":1253,"children":1254},{},[1255],{"type":20,"value":1256},"Test in browser before committing",{"type":14,"tag":35,"props":1258,"children":1260},{"id":1259},"security",[1261],{"type":20,"value":1262},"Security",{"type":14,"tag":42,"props":1264,"children":1265},{},[1266,1271,1276,1281],{"type":14,"tag":46,"props":1267,"children":1268},{},[1269],{"type":20,"value":1270},"Don't share SSH connection string",{"type":14,"tag":46,"props":1272,"children":1273},{},[1274],{"type":20,"value":1275},"Revoke access when sharing workspace",{"type":14,"tag":46,"props":1277,"children":1278},{},[1279],{"type":20,"value":1280},"SSH is encrypted (secure)",{"type":14,"tag":46,"props":1282,"children":1283},{},[1284],{"type":20,"value":1285},"Use strong team access control",{"type":14,"tag":28,"props":1287,"children":1289},{"id":1288},"disconnect-and-cleanup",[1290],{"type":20,"value":1291},"Disconnect and Cleanup",{"type":14,"tag":35,"props":1293,"children":1295},{"id":1294},"end-ssh-session",[1296],{"type":20,"value":1297},"End SSH Session",{"type":14,"tag":181,"props":1299,"children":1301},{"code":1300,"language":199,"meta":7,"className":200,"style":7},"# Type exit\nexit\n\n# Or Ctrl+D\n",[1302],{"type":14,"tag":186,"props":1303,"children":1304},{"__ignoreMap":7},[1305,1313,1321,1328],{"type":14,"tag":206,"props":1306,"children":1307},{"class":208,"line":209},[1308],{"type":14,"tag":206,"props":1309,"children":1310},{"style":213},[1311],{"type":20,"value":1312},"# Type exit\n",{"type":14,"tag":206,"props":1314,"children":1315},{"class":208,"line":219},[1316],{"type":14,"tag":206,"props":1317,"children":1318},{"style":984},[1319],{"type":20,"value":1320},"exit\n",{"type":14,"tag":206,"props":1322,"children":1323},{"class":208,"line":235},[1324],{"type":14,"tag":206,"props":1325,"children":1326},{"emptyLinePlaceholder":239},[1327],{"type":20,"value":242},{"type":14,"tag":206,"props":1329,"children":1330},{"class":208,"line":245},[1331],{"type":14,"tag":206,"props":1332,"children":1333},{"style":213},[1334],{"type":20,"value":1335},"# Or Ctrl+D\n",{"type":14,"tag":35,"props":1337,"children":1339},{"id":1338},"view-active-ssh-sessions",[1340],{"type":20,"value":1341},"View Active SSH Sessions",{"type":14,"tag":156,"props":1343,"children":1344},{},[1345,1349,1358,1371],{"type":14,"tag":46,"props":1346,"children":1347},{},[1348],{"type":20,"value":163},{"type":14,"tag":46,"props":1350,"children":1351},{},[1352,1353],{"type":20,"value":168},{"type":14,"tag":170,"props":1354,"children":1355},{},[1356],{"type":20,"value":1357},"Connections",{"type":14,"tag":46,"props":1359,"children":1360},{},[1361,1363],{"type":20,"value":1362},"See all SSH sessions:",{"type":14,"tag":181,"props":1364,"children":1366},{"code":1365},"alice@alice-mbp.local (connected 2h ago)\nalice@desktop.local (connected 1h ago)\n",[1367],{"type":14,"tag":186,"props":1368,"children":1369},{"__ignoreMap":7},[1370],{"type":20,"value":1365},{"type":14,"tag":46,"props":1372,"children":1373},{},[1374,1376],{"type":20,"value":1375},"Kick out session if needed:",{"type":14,"tag":181,"props":1377,"children":1379},{"code":1378},"Click session → Click Disconnect\n",[1380],{"type":14,"tag":186,"props":1381,"children":1382},{"__ignoreMap":7},[1383],{"type":20,"value":1378},{"type":14,"tag":28,"props":1385,"children":1387},{"id":1386},"related-topics",[1388],{"type":20,"value":1389},"Related Topics",{"type":14,"tag":42,"props":1391,"children":1392},{},[1393,1405,1416],{"type":14,"tag":46,"props":1394,"children":1395},{},[1396,1403],{"type":14,"tag":1397,"props":1398,"children":1400},"a",{"href":1399},"\u002Fdocs\u002Ffeatures\u002Fcoder-workspaces",[1401],{"type":20,"value":1402},"Coder Workspaces",{"type":20,"value":1404}," - Create workspaces",{"type":14,"tag":46,"props":1406,"children":1407},{},[1408,1414],{"type":14,"tag":1397,"props":1409,"children":1411},{"href":1410},"\u002Fdocs\u002Ffeatures\u002Fcoder-teams",[1412],{"type":20,"value":1413},"Coder Teams",{"type":20,"value":1415}," - Pair program",{"type":14,"tag":46,"props":1417,"children":1418},{},[1419,1425],{"type":14,"tag":1397,"props":1420,"children":1422},{"href":1421},"\u002Fdocs\u002Ffeatures\u002Fcoder-troubleshooting",[1423],{"type":20,"value":1424},"Coder Troubleshooting",{"type":20,"value":1426}," - Fix issues",{"type":14,"tag":1428,"props":1429,"children":1430},"style",{},[1431],{"type":20,"value":1432},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":219,"depth":219,"links":1434},[1435,1440,1445,1450,1454,1458,1463,1468,1473,1477],{"id":30,"depth":219,"text":33,"children":1436},[1437,1438,1439],{"id":37,"depth":235,"text":40},{"id":68,"depth":235,"text":71},{"id":97,"depth":235,"text":100},{"id":121,"depth":219,"text":124,"children":1441},[1442,1443,1444],{"id":127,"depth":235,"text":130},{"id":151,"depth":235,"text":154},{"id":192,"depth":235,"text":195},{"id":295,"depth":219,"text":298,"children":1446},[1447,1448,1449],{"id":301,"depth":235,"text":304},{"id":363,"depth":235,"text":366},{"id":452,"depth":235,"text":455},{"id":534,"depth":219,"text":537,"children":1451},[1452,1453],{"id":540,"depth":235,"text":543},{"id":577,"depth":235,"text":580},{"id":657,"depth":219,"text":660,"children":1455},[1456,1457],{"id":663,"depth":235,"text":666},{"id":817,"depth":235,"text":820},{"id":874,"depth":219,"text":877,"children":1459},[1460,1461,1462],{"id":880,"depth":235,"text":883},{"id":1040,"depth":235,"text":1043},{"id":1113,"depth":235,"text":1116},{"id":1132,"depth":219,"text":1135,"children":1464},[1465,1466,1467],{"id":1138,"depth":235,"text":1141},{"id":1152,"depth":235,"text":1155},{"id":1166,"depth":235,"text":1169},{"id":1195,"depth":219,"text":1198,"children":1469},[1470,1471,1472],{"id":1201,"depth":235,"text":1204},{"id":1230,"depth":235,"text":1233},{"id":1259,"depth":235,"text":1262},{"id":1288,"depth":219,"text":1291,"children":1474},[1475,1476],{"id":1294,"depth":235,"text":1297},{"id":1338,"depth":235,"text":1341},{"id":1386,"depth":219,"text":1389},"markdown","content:docs:features:coder-ssh.md","content","docs\u002Ffeatures\u002Fcoder-ssh.md","docs\u002Ffeatures\u002Fcoder-ssh","md",1782233762260]