[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/guides/linux/vim-basic-commands":3,"mdc-mvvjxz-key":869,"mdc-dpj5h2-key":901,"mdc--wwf15u-key":924,"mdc--64w126-key":974,"mdc--bmnftv-key":982,"mdc--2h12l9-key":999,"mdc-46nxz6-key":1048,"mdc--q1moiy-key":1124,"mdc-3enz4k-key":1174,"related-/guides/linux/neovim-config,/guides/linux/nano-vs-vim,/guides/linux/ssh-troubleshooting":1224},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":802,"code":802,"createdAt":803,"description":804,"difficulty":805,"draft":806,"estimatedTime":807,"extension":808,"faq":809,"howToSteps":822,"howToTotalTime":838,"image":802,"keywords":839,"locale":849,"meta":850,"navigation":851,"path":852,"platform":853,"related":854,"section":858,"seo":859,"severity":802,"stem":860,"summary":861,"tags":862,"twitterCreator":802,"twitterSite":802,"type":867,"updatedAt":803,"__hash__":868},"content_ru/guides/linux/vim-basic-commands.md","Vim для начинающих: основные команды и горячие клавиши",[7,8,9],"Vim 8.0+","Neovim 0.5+","Любой дистрибутив Linux","FixPedia Team",{"type":12,"value":13,"toc":789},"minimark",[14,19,23,27,69,73,76,98,101,109,114,141,145,152,176,181,239,243,253,258,264,269,352,366,370,375,380,415,420,434,439,476,493,519,522,526,535,591,595,598,642,646,688,692,710,724,738,761,785],[15,16,18],"h2",{"id":17},"введение-зачем-это-нужно","Введение / Зачем это нужно",[20,21,22],"p",{},"Vim (Vi IMproved) — это мощный текстовый редактор, работающий прямо в терминале. Его знание критически важно для администрирования Linux-серверов, где часто нет графического интерфейса. Этот гайд развеет миф о сложности Vim и даст вам практические навыки для повседневной работы: редактирования конфигурационных файлов, просмотра логов, быстрых правок кода. Вы перестанете бояться черного экрана и научитесь эффективно работать без мыши.",[15,24,26],{"id":25},"требования-подготовка","Требования / Подготовка",[28,29,30,51,57,63],"ol",{},[31,32,33,37,38,42,43,46,47,50],"li",{},[34,35,36],"strong",{},"Установленный Vim",". В большинстве дистрибутивов он предустановлен. Проверьте: ",[39,40,41],"code",{},"vim --version",". Если нет, установите: ",[39,44,45],{},"sudo apt install vim"," (Debian/Ubuntu) или ",[39,48,49],{},"sudo yum install vim"," (RHEL/CentOS).",[31,52,53,56],{},[34,54,55],{},"Терминал"," (konsole, gnome-terminal, xterm и т.д.).",[31,58,59,62],{},[34,60,61],{},"Базовое понимание командной строки"," (cd, ls).",[31,64,65,68],{},[34,66,67],{},"Права на запись"," в директорию, где будете создавать/редактировать файлы.",[15,70,72],{"id":71},"шаг-1-запуск-vim-и-понимание-интерфейса","Шаг 1: Запуск Vim и понимание интерфейса",[20,74,75],{},"Откройте терминал и создайте тестовый файл:",[77,78,83],"pre",{"className":79,"code":80,"language":81,"meta":82,"style":82},"language-bash shiki shiki-themes github-light github-dark","vim test.txt\n","bash","",[39,84,85],{"__ignoreMap":82},[86,87,90,94],"span",{"class":88,"line":89},"line",1,[86,91,93],{"class":92},"sScJk","vim",[86,95,97],{"class":96},"sZZnC"," test.txt\n",[20,99,100],{},"Вы увидите экран, похожий на этот:",[77,102,107],{"className":103,"code":105,"language":106},[104],"language-text","\"test.txt\" [New File]\n~\n~\n~\n~\n~\n~\n~\n~\n","text",[39,108,105],{"__ignoreMap":82},[20,110,111],{},[34,112,113],{},"Что это значит:",[115,116,117,124,131],"ul",{},[31,118,119,120,123],{},"Строка вверху (",[39,121,122],{},"\"test.txt\" [New File]",") — статус.",[31,125,126,127,130],{},"Тilde (",[39,128,129],{},"~",") обозначает пустые строки после конца файла.",[31,132,133,136,137,140],{},[34,134,135],{},"Самое главное:"," вы находитесь в ",[34,138,139],{},"Normal mode"," (иногда called Command mode). В этом режиме каждая нажатая клавиша — это команда Vim, а не символ для ввода. Если вы начнете печатать, ничего не появится. Это нормально.",[15,142,144],{"id":143},"шаг-2-переключение-в-режим-вставки-insert-mode","Шаг 2: Переключение в режим вставки (Insert mode)",[20,146,147,148,151],{},"Чтобы начать редактировать текст, нужно перейти в ",[34,149,150],{},"Insert mode",".",[28,153,154,164,170],{},[31,155,156,157,160,161,163],{},"Нажмите клавишу ",[39,158,159],{},"i"," (латинская ",[39,162,159],{},").",[31,165,166,167,151],{},"Внизу экрана появится подсказка ",[39,168,169],{},"-- INSERT --",[31,171,172,173],{},"Теперь печатайте текст как в обычном редакторе. Например, введите: ",[39,174,175],{},"Привет, мир! Это мой первый файл в Vim.",[20,177,178],{},[34,179,180],{},"Быстрые варианты входа в Insert mode:",[115,182,183,193,203,212,220,230],{},[31,184,185,187,188,192],{},[39,186,159],{}," — вставить ",[189,190,191],"em",{},"перед"," курсором (самый частый).",[31,194,195,198,199,202],{},[39,196,197],{},"I"," — вставить в ",[189,200,201],{},"начало"," текущей строки.",[31,204,205,187,208,211],{},[39,206,207],{},"a",[189,209,210],{},"после"," курсора.",[31,213,214,198,217,202],{},[39,215,216],{},"A",[189,218,219],{},"конец",[31,221,222,225,226,229],{},[39,223,224],{},"o"," — создать новую строку ",[189,227,228],{},"ниже"," текущей и перейти в Insert mode.",[31,231,232,225,235,238],{},[39,233,234],{},"O",[189,236,237],{},"выше"," текущей.",[15,240,242],{"id":241},"шаг-3-навигация-по-файлу-без-мыши","Шаг 3: Навигация по файлу без мыши",[20,244,245,246,249,250,252],{},"Когда закончили ввод, нажмите ",[39,247,248],{},"Esc"," — вы вернетесь в ",[34,251,139],{},". Теперь управляйте курсором:",[20,254,255],{},[34,256,257],{},"Базовые движения (одна клавиша):",[77,259,262],{"className":260,"code":261,"language":106,"meta":82},[104],"h — влево\nj — вниз\nk — вверх\nl — вправо\n",[39,263,261],{"__ignoreMap":82},[20,265,266],{},[34,267,268],{},"Быстрые перемещения:",[115,270,271,277,283,289,295,301,307,327,344],{},[31,272,273,276],{},[39,274,275],{},"w"," — перейти к началу следующего слова.",[31,278,279,282],{},[39,280,281],{},"b"," — перейти к началу предыдущего слова.",[31,284,285,288],{},[39,286,287],{},"0"," (ноль) — в начало строки.",[31,290,291,294],{},[39,292,293],{},"$"," — в конец строки.",[31,296,297,300],{},[39,298,299],{},"gg"," — в самое начало файла.",[31,302,303,306],{},[39,304,305],{},"G"," (Shift+g) — в самый конец файла.",[31,308,309,312,313,316,317,320,321,312,324,163],{},[39,310,311],{},":n"," или ",[39,314,315],{},"nG"," — перейти на строку номер ",[39,318,319],{},"n"," (например, ",[39,322,323],{},":15",[39,325,326],{},"15G",[31,328,329,332,333,336,337,339,340,343],{},[39,330,331],{},"/текст"," + ",[39,334,335],{},"Enter"," — поиск вперед. ",[39,338,319],{}," — следующее совпадение, ",[39,341,342],{},"N"," — предыдущее.",[31,345,346,332,349,351],{},[39,347,348],{},"?текст",[39,350,335],{}," — поиск назад.",[353,354,355],"blockquote",{},[20,356,357,358,361,362,365],{},"💡 ",[34,359,360],{},"Совет:"," Практикуйте движения ",[39,363,364],{},"hjkl"," 5 минут в день. Это основа скорости в Vim.",[15,367,369],{"id":368},"шаг-4-редактирование-удаление-отмена-копирование-вставка","Шаг 4: Редактирование: удаление, отмена, копирование, вставка",[20,371,372,373,151],{},"Все действия выполняются в ",[34,374,139],{},[20,376,377],{},[34,378,379],{},"Удаление:",[115,381,382,388,394,400,409],{},[31,383,384,387],{},[39,385,386],{},"x"," — удалить символ под курсором.",[31,389,390,393],{},[39,391,392],{},"dd"," — удалить (вырезать) всю текущую строку.",[31,395,396,399],{},[39,397,398],{},"dw"," — удалить слово, начиная с курсора.",[31,401,402,312,405,408],{},[39,403,404],{},"d$",[39,406,407],{},"D"," — удалить от курсора до конца строки.",[31,410,411,414],{},[39,412,413],{},"dgg"," — удалить от текущей строки до начала файла.",[20,416,417],{},[34,418,419],{},"Отмена и повтор:",[115,421,422,428],{},[31,423,424,427],{},[39,425,426],{},"u"," — отменить последнее изменение (undo).",[31,429,430,433],{},[39,431,432],{},"Ctrl + r"," — повторить отмененное изменение (redo).",[20,435,436],{},[34,437,438],{},"Копирование (yank) и вставка (put):",[115,440,441,447,453,459,467],{},[31,442,443,446],{},[39,444,445],{},"yy"," — скопировать (yank) текущую строку.",[31,448,449,452],{},[39,450,451],{},"yw"," — скопировать слово.",[31,454,455,458],{},[39,456,457],{},"y$"," — скопировать от курсора до конца строки.",[31,460,461,463,464,466],{},[39,462,20],{}," — вставить (put) скопированное ",[189,465,210],{}," курсора/строки.",[31,468,469,472,473,475],{},[39,470,471],{},"P"," (Shift+p) — вставить ",[189,474,191],{}," курсором/строкой.",[20,477,478,481,482,485,486,489,490,492],{},[34,479,480],{},"Визуальный режим для выделения:","\nНажмите ",[39,483,484],{},"v"," (визуальный символьный режим) или ",[39,487,488],{},"V"," (визуальный режим строк). Перемещайтесь курсором (",[39,491,364],{},"), чтобы выделить область. Затем:",[115,494,495,501,507,513],{},[31,496,497,500],{},[39,498,499],{},"y"," — скопировать выделенное.",[31,502,503,506],{},[39,504,505],{},"d"," — удалить (вырезать) выделенное.",[31,508,509,512],{},[39,510,511],{},">"," — сдвинуть выделенное вправо (отступ).",[31,514,515,518],{},[39,516,517],{},"\u003C"," — сдвинуть влево.",[520,521],"in-article-ad",{},[15,523,525],{"id":524},"шаг-5-сохранение-и-выход","Шаг 5: Сохранение и выход",[20,527,528,529,532,533,151],{},"Все команды сохранения/выхода начинаются с двоеточия ",[39,530,531],{},":"," и выполняются в ",[34,534,139],{},[28,536,537,542],{},[31,538,539,540,163],{},"Убедитесь, что вы в Normal mode (нажмите ",[39,541,248],{},[31,543,544,545],{},"Введите:\n",[115,546,547,555,563,575,585],{},[31,548,549,332,552,554],{},[39,550,551],{},":w",[39,553,335],{}," — сохранить (write) файл.",[31,556,557,332,560,562],{},[39,558,559],{},":q",[39,561,335],{}," — выйти (quit), если нет несохраненных изменений.",[31,564,565,312,568,312,571,574],{},[39,566,567],{},":wq",[39,569,570],{},":x",[39,572,573],{},"ZZ"," — сохранить и выйти.",[31,576,577,580,581,584],{},[39,578,579],{},":q!"," — выйти ",[189,582,583],{},"без сохранения"," изменений (принудительно).",[31,586,587,590],{},[39,588,589],{},":w имя_файла"," — сохранить текущий буфер под другим именем (\"Save As\").",[15,592,594],{"id":593},"шаг-6-работа-с-несколькими-файлами-и-buffers","Шаг 6: Работа с несколькими файлами и buffers",[20,596,597],{},"Vim может работать с несколькими файлами одновременно.",[115,599,600,613,619,625,631],{},[31,601,602,605,606,608,609,612],{},[39,603,604],{},":e имя_файла"," — открыть (edit) другой файл в текущем окне. Текущий буфер сохранится автоматически, если были изменения? Нет, нужно сохранить явно ",[39,607,551],{}," или использовать ",[39,610,611],{},":enew"," для нового файла.",[31,614,615,618],{},[39,616,617],{},":bn"," — перейти к следующему буферу (buffer next).",[31,620,621,624],{},[39,622,623],{},":bp"," — перейти к предыдущему буферу.",[31,626,627,630],{},[39,628,629],{},":ls"," — список всех открытых buffers.",[31,632,633,636,637,639,640,163],{},[39,634,635],{},":b n"," — перейти к буферу с номером ",[39,638,319],{}," (из списка ",[39,641,629],{},[15,643,645],{"id":644},"проверка-результата","Проверка результата",[28,647,648,654,660,665,676,681],{},[31,649,650,651,151],{},"Откройте тестовый файл: ",[39,652,653],{},"vim test.txt",[31,655,656,657,659],{},"Перейдите в Insert mode (",[39,658,159],{},"), добавьте новую строку.",[31,661,662,663,163],{},"Вернитесь в Normal mode (",[39,664,248],{},[31,666,667,668,670,671,673,674,163],{},"Скопируйте добавленную строку (",[39,669,445],{},"), переместитесь в конец файла (",[39,672,305],{},"), вставьте (",[39,675,20],{},[31,677,678,679,163],{},"Сохраните и выйдите (",[39,680,567],{},[31,682,683,684,687],{},"Просмотрите файл командой ",[39,685,686],{},"cat test.txt"," — вы должны увидеть две одинаковые строки.",[15,689,691],{"id":690},"возможные-проблемы","Возможные проблемы",[353,693,694],{},[20,695,696,697,700,701,703,704,706,707,709],{},"⚠️ ",[34,698,699],{},"\"Заснул\" в Vim, ничего не происходит?","\nВы находитесь в Normal mode. Нажмите ",[39,702,159],{}," для вставки текста или ",[39,705,248],{},", затем ",[39,708,579],{}," для выхода.",[353,711,712],{},[20,713,696,714,717,718,720,721,723],{},[34,715,716],{},"Не могу выйти, пишет \"No write since last change (add ! to override)\"?","\nУ вас есть несохраненные изменения. Используйте ",[39,719,567],{}," (сохранить и выйти) или ",[39,722,579],{}," (выйти без сохранения).",[353,725,726],{},[20,727,696,728,734,735,737],{},[34,729,730,731,733],{},"Курсор не двигается клавишами ",[39,732,364],{},"?","\nВозможно, вы используете нестандартную раскладку или переопределили клавиши. Проверьте, что вы находитесь в Normal mode (",[39,736,248],{},"). Также в некоторых эмуляциях терминалов могут быть конфликты. Попробуйте использовать стрелки.",[353,739,740],{},[20,741,696,742,749,750,753,754,757,758,151],{},[34,743,744,745,748],{},"Поиск (",[39,746,747],{},"/",") не находит, хотя текст есть?","\nУбедитесь, что вы ищете точное написание (регистрозависимо по умолчанию). Используйте ",[39,751,752],{},"\\c"," в конце шаблона для игнорирования регистра: ",[39,755,756],{},"/текст\\c",". Также проверьте, что не осталась старая подсветка поиска — очистите ее ",[39,759,760],{},":nohlsearch",[353,762,763],{},[20,764,696,765,772,773,776,777,780,781,784],{},[34,766,767,768,771],{},"Случайно нажал ",[39,769,770],{},"Ctrl + s"," и терминал \"завис\"?","\nЭто стандартное поведение терминала (XON/XOFF flow control). Разблокируйте: нажмите ",[39,774,775],{},"Ctrl + q",". В Vim можно отключить это поведение, добавив в ",[39,778,779],{},"~/.vimrc",": ",[39,782,783],{},"set t_ts= t_fs="," (но это для продвинутых).",[786,787,788],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":82,"searchDepth":790,"depth":790,"links":791},2,[792,793,794,795,796,797,798,799,800,801],{"id":17,"depth":790,"text":18},{"id":25,"depth":790,"text":26},{"id":71,"depth":790,"text":72},{"id":143,"depth":790,"text":144},{"id":241,"depth":790,"text":242},{"id":368,"depth":790,"text":369},{"id":524,"depth":790,"text":525},{"id":593,"depth":790,"text":594},{"id":644,"depth":790,"text":645},{"id":690,"depth":790,"text":691},null,"2026-02-17 11:52:59","Полное руководство по Vim. Освойте базовые команды навигации, редактирования и сохранения файлов всего за 15 минут. Пошаговая инструкция с примерами.","easy",false,"15-30 мин","md",[810,813,816,819],{"question":811,"answer":812},"Как правильно выйти из Vim, если застрял?","Нажмите `Esc`, чтобы перейти в Normal mode, затем введите `:q!` для принудительного выхода без сохранения или `:wq` для сохранения и выхода.",{"question":814,"answer":815},"Чем режим Normal отличается от Insert?","Normal mode — для навигации и управления (удаление, копирование). Insert mode — для ввода текста, как в любом другом редакторе. Переключаются клавишей `i` (вставка) или `Esc` (нормальный).",{"question":817,"answer":818},"Как скопировать и вставить строку в Vim?","В Normal mode: `yy` скопировать текущую строку, `p` вставить ниже, `P` вставить выше. Для блока: `V` (визуальный режим), выделить, затем `y` (копировать) и `p`.",{"question":820,"answer":821},"Почему Vim кажется сложным и стоит ли его учить?","Vim имеет кривую обучения, но после освоения базовых команд скорость редактирования текста в терминале возрастает кратно. Это стандартный инструмент на большинстве серверов Linux.",[823,826,829,832,835],{"name":824,"text":825},"Запуск Vim и понимание интерфейса","Откройте терминал и выполните `vim имя_файла` (если файла нет — создастся). Вы увидите титульную строку и тело файла. Немедленно начните нажимать клавиши — ничего не произойдет, потому что вы в Normal mode.",{"name":827,"text":828},"Переключение в режим вставки (Insert mode)","Нажмите `i` (insert), чтобы начать печатать текст. Вы увидите `-- INSERT --` внизу. Для вставки в начало строки используйте `I`, в конец — `A`, ниже текущей — `o`, выше — `O`.",{"name":830,"text":831},"Навигация по файлу без мыши","Вернитесь в Normal mode клавишей `Esc`. Используйте `h` (влево), `j` (вниз), `k` (вверх), `l` (вправо). Для быстрой навигации: `gg` — в начало файла, `G` — в конец, `:n` — на строку n, `/текст` — поиск вперед.",{"name":833,"text":834},"Редактирование: удаление, отмена, повтор","В Normal mode: `x` — удалить символ под курсором, `dd` — удалить строку, `dw` — удалить слово. `u` — отменить действие, `Ctrl + r` — повторить. `p` — вставить последнее удаленное/скопированное.",{"name":836,"text":837},"Сохранение и выход из Vim","В Normal mode введите `:w` для сохранения, `:q` для выхода. Комбинируйте: `:wq` или `ZZ` — сохранить и выйти. `:q!` — выйти без сохранения. `:w имя_файла` — сохранить как.","PT20M",[840,841,842,843,844,845,846,847,848],"vim команды для начинающих","как выйти из vim","основы vim редактор","горячие клавиши vim","vim linux tutorial","редактор vim как пользоваться","vim insert mode normal mode","vim save and exit","vi vs vim","ru_RU",{},true,"/guides/linux/vim-basic-commands","linux",[855,856,857],"/guides/linux/neovim-config","/guides/linux/nano-vs-vim","/guides/linux/ssh-troubleshooting","Гайды Linux",{"title":5,"description":804},"guides/linux/vim-basic-commands","Этот гайд научит вас пользоваться редактором Vim с нуля. Вы узнаете, как перемещаться по файлу, вносить изменения, сохранять их и выходить. После прохождения вы сможете уверенно работать в Vim для простых задач.",[93,853,863,864,865,866],"terminal","cli","редактор","основы","guide","-i1zF6w-7KUKVEyHf4NYEN66V0tdN99QCX94_8ZvDf0",{"data":870,"body":871},{},{"type":872,"children":873},"root",[874],{"type":875,"tag":20,"props":876,"children":877},"element",{},[878,880,885,887,892,894,899],{"type":106,"value":879},"Нажмите ",{"type":875,"tag":39,"props":881,"children":883},{"className":882},[],[884],{"type":106,"value":248},{"type":106,"value":886},", чтобы перейти в Normal mode, затем введите ",{"type":875,"tag":39,"props":888,"children":890},{"className":889},[],[891],{"type":106,"value":579},{"type":106,"value":893}," для принудительного выхода без сохранения или ",{"type":875,"tag":39,"props":895,"children":897},{"className":896},[],[898],{"type":106,"value":567},{"type":106,"value":900}," для сохранения и выхода.",{"data":902,"body":903},{},{"type":872,"children":904},[905],{"type":875,"tag":20,"props":906,"children":907},{},[908,910,915,917,922],{"type":106,"value":909},"Normal mode — для навигации и управления (удаление, копирование). Insert mode — для ввода текста, как в любом другом редакторе. Переключаются клавишей ",{"type":875,"tag":39,"props":911,"children":913},{"className":912},[],[914],{"type":106,"value":159},{"type":106,"value":916}," (вставка) или ",{"type":875,"tag":39,"props":918,"children":920},{"className":919},[],[921],{"type":106,"value":248},{"type":106,"value":923}," (нормальный).",{"data":925,"body":926},{},{"type":872,"children":927},[928],{"type":875,"tag":20,"props":929,"children":930},{},[931,933,938,940,945,947,952,954,959,961,966,968,973],{"type":106,"value":932},"В Normal mode: ",{"type":875,"tag":39,"props":934,"children":936},{"className":935},[],[937],{"type":106,"value":445},{"type":106,"value":939}," скопировать текущую строку, ",{"type":875,"tag":39,"props":941,"children":943},{"className":942},[],[944],{"type":106,"value":20},{"type":106,"value":946}," вставить ниже, ",{"type":875,"tag":39,"props":948,"children":950},{"className":949},[],[951],{"type":106,"value":471},{"type":106,"value":953}," вставить выше. Для блока: ",{"type":875,"tag":39,"props":955,"children":957},{"className":956},[],[958],{"type":106,"value":488},{"type":106,"value":960}," (визуальный режим), выделить, затем ",{"type":875,"tag":39,"props":962,"children":964},{"className":963},[],[965],{"type":106,"value":499},{"type":106,"value":967}," (копировать) и ",{"type":875,"tag":39,"props":969,"children":971},{"className":970},[],[972],{"type":106,"value":20},{"type":106,"value":151},{"data":975,"body":976},{},{"type":872,"children":977},[978],{"type":875,"tag":20,"props":979,"children":980},{},[981],{"type":106,"value":821},{"data":983,"body":984},{},{"type":872,"children":985},[986],{"type":875,"tag":20,"props":987,"children":988},{},[989,991,997],{"type":106,"value":990},"Откройте терминал и выполните ",{"type":875,"tag":39,"props":992,"children":994},{"className":993},[],[995],{"type":106,"value":996},"vim имя_файла",{"type":106,"value":998}," (если файла нет — создастся). Вы увидите титульную строку и тело файла. Немедленно начните нажимать клавиши — ничего не произойдет, потому что вы в Normal mode.",{"data":1000,"body":1001},{},{"type":872,"children":1002},[1003],{"type":875,"tag":20,"props":1004,"children":1005},{},[1006,1007,1012,1014,1019,1021,1026,1028,1033,1035,1040,1042,1047],{"type":106,"value":879},{"type":875,"tag":39,"props":1008,"children":1010},{"className":1009},[],[1011],{"type":106,"value":159},{"type":106,"value":1013}," (insert), чтобы начать печатать текст. Вы увидите ",{"type":875,"tag":39,"props":1015,"children":1017},{"className":1016},[],[1018],{"type":106,"value":169},{"type":106,"value":1020}," внизу. Для вставки в начало строки используйте ",{"type":875,"tag":39,"props":1022,"children":1024},{"className":1023},[],[1025],{"type":106,"value":197},{"type":106,"value":1027},", в конец — ",{"type":875,"tag":39,"props":1029,"children":1031},{"className":1030},[],[1032],{"type":106,"value":216},{"type":106,"value":1034},", ниже текущей — ",{"type":875,"tag":39,"props":1036,"children":1038},{"className":1037},[],[1039],{"type":106,"value":224},{"type":106,"value":1041},", выше — ",{"type":875,"tag":39,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":106,"value":234},{"type":106,"value":151},{"data":1049,"body":1050},{},{"type":872,"children":1051},[1052],{"type":875,"tag":20,"props":1053,"children":1054},{},[1055,1057,1062,1064,1070,1072,1078,1080,1086,1088,1094,1096,1101,1103,1108,1110,1115,1117,1122],{"type":106,"value":1056},"Вернитесь в Normal mode клавишей ",{"type":875,"tag":39,"props":1058,"children":1060},{"className":1059},[],[1061],{"type":106,"value":248},{"type":106,"value":1063},". Используйте ",{"type":875,"tag":39,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":106,"value":1069},"h",{"type":106,"value":1071}," (влево), ",{"type":875,"tag":39,"props":1073,"children":1075},{"className":1074},[],[1076],{"type":106,"value":1077},"j",{"type":106,"value":1079}," (вниз), ",{"type":875,"tag":39,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":106,"value":1085},"k",{"type":106,"value":1087}," (вверх), ",{"type":875,"tag":39,"props":1089,"children":1091},{"className":1090},[],[1092],{"type":106,"value":1093},"l",{"type":106,"value":1095}," (вправо). Для быстрой навигации: ",{"type":875,"tag":39,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":106,"value":299},{"type":106,"value":1102}," — в начало файла, ",{"type":875,"tag":39,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":106,"value":305},{"type":106,"value":1109}," — в конец, ",{"type":875,"tag":39,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":106,"value":311},{"type":106,"value":1116}," — на строку n, ",{"type":875,"tag":39,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":106,"value":331},{"type":106,"value":1123}," — поиск вперед.",{"data":1125,"body":1126},{},{"type":872,"children":1127},[1128],{"type":875,"tag":20,"props":1129,"children":1130},{},[1131,1132,1137,1139,1144,1146,1151,1153,1158,1160,1165,1167,1172],{"type":106,"value":932},{"type":875,"tag":39,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":106,"value":386},{"type":106,"value":1138}," — удалить символ под курсором, ",{"type":875,"tag":39,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":106,"value":392},{"type":106,"value":1145}," — удалить строку, ",{"type":875,"tag":39,"props":1147,"children":1149},{"className":1148},[],[1150],{"type":106,"value":398},{"type":106,"value":1152}," — удалить слово. ",{"type":875,"tag":39,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":106,"value":426},{"type":106,"value":1159}," — отменить действие, ",{"type":875,"tag":39,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":106,"value":432},{"type":106,"value":1166}," — повторить. ",{"type":875,"tag":39,"props":1168,"children":1170},{"className":1169},[],[1171],{"type":106,"value":20},{"type":106,"value":1173}," — вставить последнее удаленное/скопированное.",{"data":1175,"body":1176},{},{"type":872,"children":1177},[1178],{"type":875,"tag":20,"props":1179,"children":1180},{},[1181,1183,1188,1190,1195,1197,1202,1203,1208,1210,1215,1217,1222],{"type":106,"value":1182},"В Normal mode введите ",{"type":875,"tag":39,"props":1184,"children":1186},{"className":1185},[],[1187],{"type":106,"value":551},{"type":106,"value":1189}," для сохранения, ",{"type":875,"tag":39,"props":1191,"children":1193},{"className":1192},[],[1194],{"type":106,"value":559},{"type":106,"value":1196}," для выхода. Комбинируйте: ",{"type":875,"tag":39,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":106,"value":567},{"type":106,"value":312},{"type":875,"tag":39,"props":1204,"children":1206},{"className":1205},[],[1207],{"type":106,"value":573},{"type":106,"value":1209}," — сохранить и выйти. ",{"type":875,"tag":39,"props":1211,"children":1213},{"className":1212},[],[1214],{"type":106,"value":579},{"type":106,"value":1216}," — выйти без сохранения. ",{"type":875,"tag":39,"props":1218,"children":1220},{"className":1219},[],[1221],{"type":106,"value":589},{"type":106,"value":1223}," — сохранить как.",[1225,2037],{"id":1226,"title":1227,"appliesTo":1228,"author":10,"body":1233,"canonical":802,"code":802,"createdAt":1974,"description":1975,"difficulty":1976,"draft":806,"estimatedTime":807,"extension":808,"faq":1977,"howToSteps":1990,"howToTotalTime":2009,"image":802,"keywords":2010,"locale":849,"meta":2021,"navigation":851,"path":855,"platform":853,"related":2022,"section":2025,"seo":2026,"severity":2027,"stem":2028,"summary":2029,"tags":2030,"twitterCreator":802,"twitterSite":802,"type":867,"updatedAt":1974,"__hash__":2036},"content_ru/guides/linux/neovim-config.md","Полное руководство по настройке Neovim в Linux",[1229,1230,1231,1232],"Neovim 0.9+","Ubuntu 20.04+","Fedora 35+","Arch Linux",{"type":12,"value":1234,"toc":1960},[1235,1239,1242,1246,1249,1260,1264,1269,1272,1275,1303,1306,1322,1325,1343,1346,1359,1362,1366,1373,1389,1393,1404,1407,1420,1423,1435,1439,1445,1542,1548,1631,1634,1636,1640,1643,1646,1673,1679,1731,1737,1772,1775,1779,1782,1788,1791,1794,1809,1812,1852,1855,1857,1860,1869,1872,1893,1896,1898,1951,1957],[15,1236,1238],{"id":1237},"введение","Введение",[20,1240,1241],{},"Neovim — это современный, расширяемый редактор кода, основанный на Vim. Он предлагает улучшенную производительность, встроенную поддержку Lua и активное сообщество. Настройка Neovim позволяет адаптировать редактор под ваши нужды: от внешнего вида до функциональности через плагины. В этом руководстве вы научитесь настраивать Neovim в Linux с нуля — от установки до создания индивидуальной конфигурации.",[15,1243,1245],{"id":1244},"требования","Требования",[20,1247,1248],{},"Перед началом убедитесь, что:",[115,1250,1251,1254,1257],{},[31,1252,1253],{},"У вас есть доступ к терминалу и базовые навыки работы с командной строкой.",[31,1255,1256],{},"Установлен Neovim (если нет — установите по инструкции ниже).",[31,1258,1259],{},"Вы знакомы с базовыми командами Vim (не обязательно, но полезно).",[15,1261,1263],{"id":1262},"пошаговая-инструкция","Пошаговая инструкция",[1265,1266,1268],"h3",{"id":1267},"шаг-1-установка-neovim","Шаг 1: Установка Neovim",[20,1270,1271],{},"Если Neovim ещё не установлен, установите его через менеджер пакетов вашего дистрибутива.",[20,1273,1274],{},"Для Ubuntu/Debian:",[77,1276,1278],{"className":79,"code":1277,"language":81,"meta":82,"style":82},"sudo apt update\nsudo apt install neovim\n",[39,1279,1280,1291],{"__ignoreMap":82},[86,1281,1282,1285,1288],{"class":88,"line":89},[86,1283,1284],{"class":92},"sudo",[86,1286,1287],{"class":96}," apt",[86,1289,1290],{"class":96}," update\n",[86,1292,1293,1295,1297,1300],{"class":88,"line":790},[86,1294,1284],{"class":92},[86,1296,1287],{"class":96},[86,1298,1299],{"class":96}," install",[86,1301,1302],{"class":96}," neovim\n",[20,1304,1305],{},"Для Fedora:",[77,1307,1309],{"className":79,"code":1308,"language":81,"meta":82,"style":82},"sudo dnf install neovim\n",[39,1310,1311],{"__ignoreMap":82},[86,1312,1313,1315,1318,1320],{"class":88,"line":89},[86,1314,1284],{"class":92},[86,1316,1317],{"class":96}," dnf",[86,1319,1299],{"class":96},[86,1321,1302],{"class":96},[20,1323,1324],{},"Для Arch Linux:",[77,1326,1328],{"className":79,"code":1327,"language":81,"meta":82,"style":82},"sudo pacman -S neovim\n",[39,1329,1330],{"__ignoreMap":82},[86,1331,1332,1334,1337,1341],{"class":88,"line":89},[86,1333,1284],{"class":92},[86,1335,1336],{"class":96}," pacman",[86,1338,1340],{"class":1339},"sj4cs"," -S",[86,1342,1302],{"class":96},[20,1344,1345],{},"После установки проверьте версию:",[77,1347,1349],{"className":79,"code":1348,"language":81,"meta":82,"style":82},"nvim --version\n",[39,1350,1351],{"__ignoreMap":82},[86,1352,1353,1356],{"class":88,"line":89},[86,1354,1355],{"class":92},"nvim",[86,1357,1358],{"class":1339}," --version\n",[20,1360,1361],{},"Рекомендуется использовать Neovim 0.9 или новее.",[1265,1363,1365],{"id":1364},"шаг-2-создание-конфигурационной-директории","Шаг 2: Создание конфигурационной директории",[20,1367,1368,1369,1372],{},"Neovim ищет конфигурационные файлы в директории ",[39,1370,1371],{},"~/.config/nvim",". Создайте её, если она отсутствует:",[77,1374,1376],{"className":79,"code":1375,"language":81,"meta":82,"style":82},"mkdir -p ~/.config/nvim\n",[39,1377,1378],{"__ignoreMap":82},[86,1379,1380,1383,1386],{"class":88,"line":89},[86,1381,1382],{"class":92},"mkdir",[86,1384,1385],{"class":1339}," -p",[86,1387,1388],{"class":96}," ~/.config/nvim\n",[1265,1390,1392],{"id":1391},"шаг-3-создание-основного-конфигурационного-файла","Шаг 3: Создание основного конфигурационного файла",[20,1394,1395,1396,1399,1400,1403],{},"Внутри этой директории создайте файл ",[39,1397,1398],{},"init.vim"," (для Vimscript) или ",[39,1401,1402],{},"init.lua"," (для Lua). В этом руководстве мы используем Vimscript для простоты, но принципы аналогичны.",[20,1405,1406],{},"Создайте файл:",[77,1408,1410],{"className":79,"code":1409,"language":81,"meta":82,"style":82},"touch ~/.config/nvim/init.vim\n",[39,1411,1412],{"__ignoreMap":82},[86,1413,1414,1417],{"class":88,"line":89},[86,1415,1416],{"class":92},"touch",[86,1418,1419],{"class":96}," ~/.config/nvim/init.vim\n",[20,1421,1422],{},"Если предпочитаете Lua:",[77,1424,1426],{"className":79,"code":1425,"language":81,"meta":82,"style":82},"touch ~/.config/nvim/init.lua\n",[39,1427,1428],{"__ignoreMap":82},[86,1429,1430,1432],{"class":88,"line":89},[86,1431,1416],{"class":92},[86,1433,1434],{"class":96}," ~/.config/nvim/init.lua\n",[1265,1436,1438],{"id":1437},"шаг-4-добавление-базовых-настроек","Шаг 4: Добавление базовых настроек",[20,1440,1441,1442,1444],{},"Откройте ",[39,1443,1398],{}," в любом редакторе и добавьте базовые настройки. Вот пример минимального конфига:",[77,1446,1449],{"className":1447,"code":1448,"language":93,"meta":82,"style":82},"language-vim shiki shiki-themes github-light github-dark","\" Включаем номера строк\nset number\n\n\" Включаем подсветку синтаксиса\nsyntax on\n\n\" Настройка отступов\nset tabstop=4       \" Ширина табуляции\nset shiftwidth=4    \" Ширина отступа при >> и \u003C\u003C\nset expandtab       \" Замена табов на пробелы\n\n\" Включаем подсветку текущей строки\nset cursorline\n\n\" Тема оформления (если установлена)\ncolorscheme desert\n",[39,1450,1451,1456,1461,1467,1473,1479,1484,1490,1496,1502,1508,1513,1519,1525,1530,1536],{"__ignoreMap":82},[86,1452,1453],{"class":88,"line":89},[86,1454,1455],{},"\" Включаем номера строк\n",[86,1457,1458],{"class":88,"line":790},[86,1459,1460],{},"set number\n",[86,1462,1464],{"class":88,"line":1463},3,[86,1465,1466],{"emptyLinePlaceholder":851},"\n",[86,1468,1470],{"class":88,"line":1469},4,[86,1471,1472],{},"\" Включаем подсветку синтаксиса\n",[86,1474,1476],{"class":88,"line":1475},5,[86,1477,1478],{},"syntax on\n",[86,1480,1482],{"class":88,"line":1481},6,[86,1483,1466],{"emptyLinePlaceholder":851},[86,1485,1487],{"class":88,"line":1486},7,[86,1488,1489],{},"\" Настройка отступов\n",[86,1491,1493],{"class":88,"line":1492},8,[86,1494,1495],{},"set tabstop=4       \" Ширина табуляции\n",[86,1497,1499],{"class":88,"line":1498},9,[86,1500,1501],{},"set shiftwidth=4    \" Ширина отступа при >> и \u003C\u003C\n",[86,1503,1505],{"class":88,"line":1504},10,[86,1506,1507],{},"set expandtab       \" Замена табов на пробелы\n",[86,1509,1511],{"class":88,"line":1510},11,[86,1512,1466],{"emptyLinePlaceholder":851},[86,1514,1516],{"class":88,"line":1515},12,[86,1517,1518],{},"\" Включаем подсветку текущей строки\n",[86,1520,1522],{"class":88,"line":1521},13,[86,1523,1524],{},"set cursorline\n",[86,1526,1528],{"class":88,"line":1527},14,[86,1529,1466],{"emptyLinePlaceholder":851},[86,1531,1533],{"class":88,"line":1532},15,[86,1534,1535],{},"\" Тема оформления (если установлена)\n",[86,1537,1539],{"class":88,"line":1538},16,[86,1540,1541],{},"colorscheme desert\n",[20,1543,1544,1545,1547],{},"Если используете Lua (",[39,1546,1402],{},"), синтаксис будет другим. Пример:",[77,1549,1553],{"className":1550,"code":1551,"language":1552,"meta":82,"style":82},"language-lua shiki shiki-themes github-light github-dark","-- Включаем номера строк\nvim.opt.number = true\n\n-- Подсветка синтаксиса\nvim.cmd('syntax on')\n\n-- Настройка отступов\nvim.opt.tabstop = 4\nvim.opt.shiftwidth = 4\nvim.opt.expandtab = true\n\n-- Подсветка текущей строки\nvim.opt.cursorline = true\n\n-- Тема\nvim.cmd('colorscheme desert')\n","lua",[39,1554,1555,1560,1565,1569,1574,1579,1583,1588,1593,1598,1603,1607,1612,1617,1621,1626],{"__ignoreMap":82},[86,1556,1557],{"class":88,"line":89},[86,1558,1559],{},"-- Включаем номера строк\n",[86,1561,1562],{"class":88,"line":790},[86,1563,1564],{},"vim.opt.number = true\n",[86,1566,1567],{"class":88,"line":1463},[86,1568,1466],{"emptyLinePlaceholder":851},[86,1570,1571],{"class":88,"line":1469},[86,1572,1573],{},"-- Подсветка синтаксиса\n",[86,1575,1576],{"class":88,"line":1475},[86,1577,1578],{},"vim.cmd('syntax on')\n",[86,1580,1581],{"class":88,"line":1481},[86,1582,1466],{"emptyLinePlaceholder":851},[86,1584,1585],{"class":88,"line":1486},[86,1586,1587],{},"-- Настройка отступов\n",[86,1589,1590],{"class":88,"line":1492},[86,1591,1592],{},"vim.opt.tabstop = 4\n",[86,1594,1595],{"class":88,"line":1498},[86,1596,1597],{},"vim.opt.shiftwidth = 4\n",[86,1599,1600],{"class":88,"line":1504},[86,1601,1602],{},"vim.opt.expandtab = true\n",[86,1604,1605],{"class":88,"line":1510},[86,1606,1466],{"emptyLinePlaceholder":851},[86,1608,1609],{"class":88,"line":1515},[86,1610,1611],{},"-- Подсветка текущей строки\n",[86,1613,1614],{"class":88,"line":1521},[86,1615,1616],{},"vim.opt.cursorline = true\n",[86,1618,1619],{"class":88,"line":1527},[86,1620,1466],{"emptyLinePlaceholder":851},[86,1622,1623],{"class":88,"line":1532},[86,1624,1625],{},"-- Тема\n",[86,1627,1628],{"class":88,"line":1538},[86,1629,1630],{},"vim.cmd('colorscheme desert')\n",[20,1632,1633],{},"Сохраните файл.",[520,1635],{},[1265,1637,1639],{"id":1638},"шаг-5-установка-менеджера-плагинов","Шаг 5: Установка менеджера плагинов",[20,1641,1642],{},"Для расширения функциональности Neovim используйте менеджер плагинов. Один из самых популярных — vim-plug. Установите его:",[20,1644,1645],{},"Скачайте скрипт установки:",[77,1647,1649],{"className":79,"code":1648,"language":81,"meta":82,"style":82},"curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs \\\n    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim\n",[39,1650,1651,1668],{"__ignoreMap":82},[86,1652,1653,1656,1659,1662,1665],{"class":88,"line":89},[86,1654,1655],{"class":92},"curl",[86,1657,1658],{"class":1339}," -fLo",[86,1660,1661],{"class":96}," ~/.local/share/nvim/site/autoload/plug.vim",[86,1663,1664],{"class":1339}," --create-dirs",[86,1666,1667],{"class":1339}," \\\n",[86,1669,1670],{"class":88,"line":790},[86,1671,1672],{"class":96},"    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim\n",[20,1674,1675,1676,1678],{},"Теперь добавьте в ",[39,1677,1398],{}," блок для плагинов:",[77,1680,1682],{"className":1447,"code":1681,"language":93,"meta":82,"style":82},"\" Начало блока плагинов\ncall plug#begin('~/.local/share/nvim/plugged')\n\n\" Пример плагина: nvim-tree (файловый менеджер)\nPlug 'nvim-tree/nvim-web-devicons' \" опционально, для иконок\nPlug 'nvim-tree/nvim-tree.lua'\n\n\" Другие плагины можно добавить здесь\n\ncall plug#end()\n",[39,1683,1684,1689,1694,1698,1703,1708,1713,1717,1722,1726],{"__ignoreMap":82},[86,1685,1686],{"class":88,"line":89},[86,1687,1688],{},"\" Начало блока плагинов\n",[86,1690,1691],{"class":88,"line":790},[86,1692,1693],{},"call plug#begin('~/.local/share/nvim/plugged')\n",[86,1695,1696],{"class":88,"line":1463},[86,1697,1466],{"emptyLinePlaceholder":851},[86,1699,1700],{"class":88,"line":1469},[86,1701,1702],{},"\" Пример плагина: nvim-tree (файловый менеджер)\n",[86,1704,1705],{"class":88,"line":1475},[86,1706,1707],{},"Plug 'nvim-tree/nvim-web-devicons' \" опционально, для иконок\n",[86,1709,1710],{"class":88,"line":1481},[86,1711,1712],{},"Plug 'nvim-tree/nvim-tree.lua'\n",[86,1714,1715],{"class":88,"line":1486},[86,1716,1466],{"emptyLinePlaceholder":851},[86,1718,1719],{"class":88,"line":1492},[86,1720,1721],{},"\" Другие плагины можно добавить здесь\n",[86,1723,1724],{"class":88,"line":1498},[86,1725,1466],{"emptyLinePlaceholder":851},[86,1727,1728],{"class":88,"line":1504},[86,1729,1730],{},"call plug#end()\n",[20,1732,1733,1734,1736],{},"Для Lua-конфига (",[39,1735,1402],{},") используйте:",[77,1738,1740],{"className":1550,"code":1739,"language":1552,"meta":82,"style":82},"-- Убедитесь, что vim-plug установлен (автозагрузка уже настроена)\n-- Затем в init.lua:\nvim.call('plug#begin', '~/.local/share/nvim/plugged')\nvim.call('plug#', 'nvim-tree/nvim-web-devicons')\nvim.call('plug#', 'nvim-tree/nvim-tree.lua')\nvim.call('plug#end')\n",[39,1741,1742,1747,1752,1757,1762,1767],{"__ignoreMap":82},[86,1743,1744],{"class":88,"line":89},[86,1745,1746],{},"-- Убедитесь, что vim-plug установлен (автозагрузка уже настроена)\n",[86,1748,1749],{"class":88,"line":790},[86,1750,1751],{},"-- Затем в init.lua:\n",[86,1753,1754],{"class":88,"line":1463},[86,1755,1756],{},"vim.call('plug#begin', '~/.local/share/nvim/plugged')\n",[86,1758,1759],{"class":88,"line":1469},[86,1760,1761],{},"vim.call('plug#', 'nvim-tree/nvim-web-devicons')\n",[86,1763,1764],{"class":88,"line":1475},[86,1765,1766],{},"vim.call('plug#', 'nvim-tree/nvim-tree.lua')\n",[86,1768,1769],{"class":88,"line":1481},[86,1770,1771],{},"vim.call('plug#end')\n",[20,1773,1774],{},"Более современные менеджеры (lazy.nvim, packer.nvim) имеют другой синтаксис, но принцип похож.",[1265,1776,1778],{"id":1777},"шаг-6-установка-плагинов-и-финальная-настройка","Шаг 6: Установка плагинов и финальная настройка",[20,1780,1781],{},"После добавления плагинов в конфиг, запустите Neovim и выполните команду установки:",[77,1783,1786],{"className":1784,"code":1785,"language":106},[104],":PlugInstall\n",[39,1787,1785],{"__ignoreMap":82},[20,1789,1790],{},"Для vim-plug. Для других менеджеров команды отличаются.",[20,1792,1793],{},"Также можно добавить дополнительные настройки для плагинов. Например, для nvim-tree:",[77,1795,1797],{"className":1447,"code":1796,"language":93,"meta":82,"style":82},"\" Включение nvim-tree при запуске Neovim (опционально)\nautocmd vimenter * NvimTreeOpen\n",[39,1798,1799,1804],{"__ignoreMap":82},[86,1800,1801],{"class":88,"line":89},[86,1802,1803],{},"\" Включение nvim-tree при запуске Neovim (опционально)\n",[86,1805,1806],{"class":88,"line":790},[86,1807,1808],{},"autocmd vimenter * NvimTreeOpen\n",[20,1810,1811],{},"Или на Lua:",[77,1813,1815],{"className":1550,"code":1814,"language":1552,"meta":82,"style":82},"-- Настройка nvim-tree (пример)\nrequire('nvim-tree').setup {\n  view = {\n    width = 30,\n    side = 'left'\n  }\n}\n",[39,1816,1817,1822,1827,1832,1837,1842,1847],{"__ignoreMap":82},[86,1818,1819],{"class":88,"line":89},[86,1820,1821],{},"-- Настройка nvim-tree (пример)\n",[86,1823,1824],{"class":88,"line":790},[86,1825,1826],{},"require('nvim-tree').setup {\n",[86,1828,1829],{"class":88,"line":1463},[86,1830,1831],{},"  view = {\n",[86,1833,1834],{"class":88,"line":1469},[86,1835,1836],{},"    width = 30,\n",[86,1838,1839],{"class":88,"line":1475},[86,1840,1841],{},"    side = 'left'\n",[86,1843,1844],{"class":88,"line":1481},[86,1845,1846],{},"  }\n",[86,1848,1849],{"class":88,"line":1486},[86,1850,1851],{},"}\n",[20,1853,1854],{},"После добавления всех настроек сохраните файл и перезапустите Neovim.",[15,1856,645],{"id":644},[20,1858,1859],{},"Запустите Neovim:",[77,1861,1863],{"className":79,"code":1862,"language":81,"meta":82,"style":82},"nvim\n",[39,1864,1865],{"__ignoreMap":82},[86,1866,1867],{"class":88,"line":89},[86,1868,1862],{"class":92},[20,1870,1871],{},"Убедитесь, что:",[115,1873,1874,1877,1880,1886],{},[31,1875,1876],{},"Номера строк отображаются.",[31,1878,1879],{},"Тема оформления применена.",[31,1881,1882,1883,163],{},"Плагины загрузились (например, nvim-tree доступен по ",[39,1884,1885],{},":NvimTreeToggle",[31,1887,1888,1889,1892],{},"Отступы работают корректно (нажмите ",[39,1890,1891],{},"Tab"," — должны появиться 4 пробела).",[20,1894,1895],{},"Если что-то не работает, проверьте конфигурационный файл на синтаксические ошибки. Neovim выводит сообщения при загрузке.",[15,1897,691],{"id":690},[115,1899,1900,1910,1920,1933,1939],{},[31,1901,1902,1905,1906,1909],{},[34,1903,1904],{},"Ошибка \"E117: Unknown function: plug#begin\""," — менеджер плагинов не установлен. Убедитесь, что вы скачали ",[39,1907,1908],{},"plug.vim"," в правильную директорию.",[31,1911,1912,1915,1916,1919],{},[34,1913,1914],{},"Плагины не загружаются"," — проверьте, что вы выполнили ",[39,1917,1918],{},":PlugInstall"," после добавления их в конфиг.",[31,1921,1922,1925,1926,1929,1930,1932],{},[34,1923,1924],{},"Конфиг не применяется"," — проверьте путь к файлу: ",[39,1927,1928],{},"~/.config/nvim/init.vim"," (или ",[39,1931,1402],{},"). Убедитесь, что файл имеет правильные права.",[31,1934,1935,1938],{},[34,1936,1937],{},"Конфликты между плагинами"," — если после добавления нового плагина возникают ошибки, попробуйте временно убрать его и перезапустить Neovim.",[31,1940,1941,1944,1945,1947,1948,151],{},[34,1942,1943],{},"Проблемы с Lua-конфигом"," — если используете ",[39,1946,1402],{},", убедитесь, что синтаксис корректен. Можно проверить через ",[39,1949,1950],{},"luac -p init.lua",[20,1952,1953,1954,1956],{},"Если проблема не решена, попробуйте временно переименовать папку ",[39,1955,1371],{}," и создать минимальный конфиг заново.",[786,1958,1959],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":82,"searchDepth":790,"depth":790,"links":1961},[1962,1963,1964,1972,1973],{"id":1237,"depth":790,"text":1238},{"id":1244,"depth":790,"text":1245},{"id":1262,"depth":790,"text":1263,"children":1965},[1966,1967,1968,1969,1970,1971],{"id":1267,"depth":1463,"text":1268},{"id":1364,"depth":1463,"text":1365},{"id":1391,"depth":1463,"text":1392},{"id":1437,"depth":1463,"text":1438},{"id":1638,"depth":1463,"text":1639},{"id":1777,"depth":1463,"text":1778},{"id":644,"depth":790,"text":645},{"id":690,"depth":790,"text":691},"2026-04-08 13:56:04","Пошаговая инструкция по настройке Neovim в Linux. Узнайте, как создать конфигурационный файл, установить плагины и оптимизировать редактор. Начните повышать продуктивность уже сегодня!","medium",[1978,1981,1984,1987],{"answer":1979,"question":1980},"Основной конфигурационный файл — `~/.config/nvim/init.vim` (для Vimscript) или `~/.config/nvim/init.lua` (для Lua).","Где находится конфигурационный файл Neovim в Linux?",{"answer":1982,"question":1983},"Удалите или переименуйте папку `~/.config/nvim`, затем перезапустите Neovim. Он создаст свежий конфиг по умолчанию.","Как сбросить настройки Neovim к заводским?",{"answer":1985,"question":1986},"Да, большинство настроек Vim совместимы. Однако Neovim поддерживает Lua и некоторые уникальные функции, поэтому рекомендуется адаптировать конфиг.","Можно ли использовать конфигурационный файл Vim для Neovim?",{"answer":1988,"question":1989},"Популярные менеджеры: vim-plug, lazy.nvim, packer.nvim. Установка обычно выполняется скриптом, который добавляется в `init.vim` или `init.lua`.","Как установить менеджер плагинов для Neovim?",[1991,1994,1997,2000,2003,2006],{"name":1992,"text":1993},"Установите Neovim","Установите Neovim через менеджер пакетов вашего дистрибутива. Пример для Ubuntu: `sudo apt install neovim`.",{"name":1995,"text":1996},"Создайте конфигурационную директорию","Создайте папку `~/.config/nvim` для хранения конфигурационных файлов.",{"name":1998,"text":1999},"Создайте основной конфигурационный файл","Внутри создайте файл `init.vim` (если используете Vimscript) или `init.lua` (для Lua).",{"name":2001,"text":2002},"Добавьте базовые настройки","Добавьте в файл основные параметры: включите номера строк, настройте отступы, выберите тему оформления.",{"name":2004,"text":2005},"Установите менеджер плагинов","Установите менеджер плагинов (например, vim-plug) и настройте его в конфигурационном файле.",{"name":2007,"text":2008},"Добавьте плагины и примените настройки","Укажите нужные плагины в конфиге, затем запустите команду установки плагинов внутри Neovim.","PT25M",[2011,2012,2013,2014,2015,2016,2017,2018,2019,2020],"настройка neovim linux","конфиг neovim","neovim конфигурационный файл","установка neovim linux","neovim инициализация","как настроить neovim","neovim для linux инструкция","neovim конфиг пример","оптимизация neovim","neovim плагины linux",{},[2023,2024],"/guides/linux/neovim-plugins","/guides/linux/vim-config","Гайды Neovim",{"title":1227,"description":1975},"low","guides/linux/neovim-config","Этот гайд поможет вам настроить Neovim в Linux с нуля. Вы узнаете, как установить редактор, создать конфигурацию, добавить плагины и настроить интерфейс под свои нужды.",[2031,853,2032,865,93,2033,2034,2035],"neovim","конфигурация","настройка","config","gui","2eqAhK7EOsUMgacy4YpM2rEkdyl9K447_LDLe8WbW3E",{"id":2038,"title":2039,"appliesTo":2040,"author":10,"body":2045,"canonical":802,"code":802,"createdAt":3508,"description":3509,"difficulty":1976,"draft":806,"estimatedTime":807,"extension":808,"faq":3510,"howToSteps":3520,"howToTotalTime":838,"image":802,"keywords":3536,"locale":849,"meta":3545,"navigation":851,"path":857,"platform":853,"related":3546,"section":858,"seo":3548,"severity":802,"stem":3549,"summary":3550,"tags":3551,"twitterCreator":802,"twitterSite":802,"type":867,"updatedAt":3508,"__hash__":3556},"content_ru/guides/linux/ssh-troubleshooting.md","SSH не подключается: полное руководство по диагностике и решению",[2041,2042,2043,2044],"Ubuntu 22.04+","CentOS 7/8","Debian 11+","Any Linux with OpenSSH",{"type":12,"value":2046,"toc":3496},[2047,2049,2052,2055,2057,2060,2109,2112,2116,2119,2279,2287,2291,2294,2340,2343,2379,2385,2389,2396,2651,2655,2658,2979,2981,2985,2988,3246,3248,3251,3262,3272,3277,3296,3298,3429,3433,3493],[15,2048,18],{"id":17},[20,2050,2051],{},"Подключение к удалённому серверу по SSH — это основа ежедневной работы системного администратора, DevOps-инженера и разработчика. Когда подключение не удаётся, работа останавливается. Ошибки SSH часто имеют схожие причины: сетевая недоступность, неверные настройки демона, проблемы с аутентификацией или блокировка брандмауэром. Этот гайд предлагает структурированный, пошаговый подход к диагностике, который поможет вам быстро найти и устранить корень проблемы, а не просто \"перезапустить сервис и надеяться\".",[20,2053,2054],{},"После выполнения этого руководства вы сможете самостоятельно диагностировать любую проблему с SSH-подключением в Linux, начиная с проверки канала и заканчивая анализом логов.",[15,2056,26],{"id":25},[20,2058,2059],{},"Перед началом диагностики убедитесь, что у вас есть:",[28,2061,2062,2068,2077,2093],{},[31,2063,2064,2067],{},[34,2065,2066],{},"Доступ к консоли сервера"," (KVM, IPMI, виртуальная консоль в панели управления хостинг-провайдера). Это критически важно, если проблема заблокировала ваш основной SSH-доступ.",[31,2069,2070,2076],{},[34,2071,2072,2073,2075],{},"Права суперпользователя (",[39,2074,1284],{},")"," на целевом сервере для проверки логов, конфигурации и управления брандмауэром.",[31,2078,2079,2082,2083,2086,2087,2086,2090,163],{},[34,2080,2081],{},"Клиентская машина"," с установленным OpenSSH-клиентом (",[39,2084,2085],{},"ssh",", ",[39,2088,2089],{},"scp",[39,2091,2092],{},"ssh-keygen",[31,2094,2095,2098,2099,2086,2102,2086,2105,2108],{},[34,2096,2097],{},"Базовые знания"," о работе сетевых команд (",[39,2100,2101],{},"ping",[39,2103,2104],{},"nc",[39,2106,2107],{},"ss",") и структуре файловых прав в Linux.",[2110,2111],"hr",{},[15,2113,2115],{"id":2114},"шаг-1-проверка-базовой-сетевой-доступности","Шаг 1: Проверка базовой сетевой доступности",[20,2117,2118],{},"Первым делом нужно понять, доходит ли ваш сетевой пакет до сервера и слушает ли сервер нужный порт (по умолчанию 22).",[28,2120,2121,2153],{},[31,2122,2123,2126,2149,2152],{},[34,2124,2125],{},"Проверьте доступность хоста:",[77,2127,2129],{"className":79,"code":2128,"language":81,"meta":82,"style":82},"ping \u003CIP_адрес_или_домен_сервера>\n",[39,2130,2131],{"__ignoreMap":82},[86,2132,2133,2135,2139,2142,2146],{"class":88,"line":89},[86,2134,2101],{"class":92},[86,2136,2138],{"class":2137},"szBVR"," \u003C",[86,2140,2141],{"class":96},"IP_адрес_или_домен_сервер",[86,2143,2145],{"class":2144},"sVt8B","а",[86,2147,2148],{"class":2137},">\n",[2150,2151],"br",{},"Если ping не проходит, проблема на сетевом уровне (маршрутизация, firewall на промежуточном узле, сервер выключен).",[31,2154,2155,2158,2159,2162,2163,2213,2215,2216,312,2219,2222,2223,2226,2227,151,2230,2232,2233,2236,2237,2239,2240,2264,2266,2267,2270,2271,2274,2275,2278],{},[34,2156,2157],{},"Проверьте, слушает ли SSH-демон порт и открыт ли он снаружи:","\nНа ",[34,2160,2161],{},"сервере"," (через консоль) выполните:",[77,2164,2166],{"className":79,"code":2165,"language":81,"meta":82,"style":82},"# Посмотреть, какой порт слушает sshd и на каком интерфейсе\nsudo ss -tlnp | grep :22\n# Или\nsudo netstat -tlnp | grep :22\n",[39,2167,2168,2174,2193,2198],{"__ignoreMap":82},[86,2169,2170],{"class":88,"line":89},[86,2171,2173],{"class":2172},"sJ8bj","# Посмотреть, какой порт слушает sshd и на каком интерфейсе\n",[86,2175,2176,2178,2181,2184,2187,2190],{"class":88,"line":790},[86,2177,1284],{"class":92},[86,2179,2180],{"class":96}," ss",[86,2182,2183],{"class":1339}," -tlnp",[86,2185,2186],{"class":2137}," |",[86,2188,2189],{"class":92}," grep",[86,2191,2192],{"class":96}," :22\n",[86,2194,2195],{"class":88,"line":1463},[86,2196,2197],{"class":2172},"# Или\n",[86,2199,2200,2202,2205,2207,2209,2211],{"class":88,"line":1469},[86,2201,1284],{"class":92},[86,2203,2204],{"class":96}," netstat",[86,2206,2183],{"class":1339},[86,2208,2186],{"class":2137},[86,2210,2189],{"class":92},[86,2212,2192],{"class":96},[2150,2214],{},"Ожидаемый результат: ",[39,2217,2218],{},"0.0.0.0:22",[39,2220,2221],{},":::22"," (слушает на всех интерфейсах). Если ",[39,2224,2225],{},"127.0.0.1:22"," — демон слушает только localhost, и нужно править ",[39,2228,2229],{},"sshd_config",[2150,2231],{},"С ",[34,2234,2235],{},"клиента"," попробуйте проверить открытость порта с помощью ",[39,2238,2104],{}," (netcat):",[77,2241,2243],{"className":79,"code":2242,"language":81,"meta":82,"style":82},"nc -zv \u003CIP_адрес_сервера> 22\n",[39,2244,2245],{"__ignoreMap":82},[86,2246,2247,2249,2252,2254,2257,2259,2261],{"class":88,"line":89},[86,2248,2104],{"class":92},[86,2250,2251],{"class":1339}," -zv",[86,2253,2138],{"class":2137},[86,2255,2256],{"class":96},"IP_адрес_сервер",[86,2258,2145],{"class":2144},[86,2260,511],{"class":2137},[86,2262,2263],{"class":1339}," 22\n",[2150,2265],{},"Успешный результат: ",[39,2268,2269],{},"Connection to \u003CIP> 22 port [tcp/ssh] succeeded!",". Если ",[39,2272,2273],{},"Connection refused"," — порт закрыт (демон не слушает или блокируется брандмауэром). Если ",[39,2276,2277],{},"Operation timed out"," — пакеты теряются (брандмауэр сбрасывает соединение или проблема с маршрутизацией).",[353,2280,2281],{},[20,2282,696,2283,2286],{},[34,2284,2285],{},"Важно:"," Некоторые облачные провайдеры (AWS, GCP, DigitalOcean) используют Security Groups / Firewall Rules на уровне гипервизора. Убедитесь, что правила там разрешают входящий трафик на порт 22/TCP с вашего IP-адреса.",[15,2288,2290],{"id":2289},"шаг-2-анализ-логов-ssh-демона-на-сервере","Шаг 2: Анализ логов SSH-демона на сервере",[20,2292,2293],{},"Логи — самый ценный источник информации. Подключитесь к консоли сервера и проверьте системный журнал.",[115,2295,2296,2319],{},[31,2297,2298,2301],{},[34,2299,2300],{},"Для Debian/Ubuntu:",[77,2302,2304],{"className":79,"code":2303,"language":81,"meta":82,"style":82},"sudo tail -f /var/log/auth.log\n",[39,2305,2306],{"__ignoreMap":82},[86,2307,2308,2310,2313,2316],{"class":88,"line":89},[86,2309,1284],{"class":92},[86,2311,2312],{"class":96}," tail",[86,2314,2315],{"class":1339}," -f",[86,2317,2318],{"class":96}," /var/log/auth.log\n",[31,2320,2321,2324],{},[34,2322,2323],{},"Для RHEL/CentOS/Rocky/AlmaLinux:",[77,2325,2327],{"className":79,"code":2326,"language":81,"meta":82,"style":82},"sudo tail -f /var/log/secure\n",[39,2328,2329],{"__ignoreMap":82},[86,2330,2331,2333,2335,2337],{"class":88,"line":89},[86,2332,1284],{"class":92},[86,2334,2312],{"class":96},[86,2336,2315],{"class":1339},[86,2338,2339],{"class":96}," /var/log/secure\n",[20,2341,2342],{},"Теперь, с клиента, попробуйте выполнить неудачное подключение. Наблюдайте за логами в реальном времени. Типичные записи и их значение:",[115,2344,2345,2351,2357,2363,2369],{},[31,2346,2347,2350],{},[39,2348,2349],{},"Failed password for \u003Cuser> from \u003Cclient_ip> port \u003Cport> ssh2"," — неверный пароль (если парольная аутентификация включена).",[31,2352,2353,2356],{},[39,2354,2355],{},"Invalid user \u003Cuser> from \u003Cclient_ip>"," — попытка логина под несуществующим пользователем.",[31,2358,2359,2362],{},[39,2360,2361],{},"Connection closed by \u003Cclient_ip> port \u003Cport> [preauth]"," — клиент разорвал соединение до аутентификации (часто из-за несовпадения ключей или таймаута).",[31,2364,2365,2368],{},[39,2366,2367],{},"Authentication failed."," — общая ошибка аутентификации (ключ, пароль, GSSAPI).",[31,2370,2371,2374,2375,2378],{},[39,2372,2373],{},"POSSIBLE BREAK-IN ATTEMPT!"," — слишком много неудачных попыток, демон может временно заблокировать IP (если настроены ",[39,2376,2377],{},"MaxAuthTries"," или fail2ban).",[20,2380,2381,2384],{},[34,2382,2383],{},"Что искать:"," точное время попытки, IP-адрес клиента, имя пользователя и конкретную строку с ошибкой.",[15,2386,2388],{"id":2387},"шаг-3-валидация-конфигурации-ssh-демона-и-прав-доступа","Шаг 3: Валидация конфигурации SSH-демона и прав доступа",[20,2390,2391,2392,2395],{},"Неправильные настройки в ",[39,2393,2394],{},"/etc/ssh/sshd_config"," или права на файлы — частая причина отказа в доступе.",[28,2397,2398,2522],{},[31,2399,2400,2403,2428,2430,2431,2489,2491,2494],{},[34,2401,2402],{},"Проверьте основной конфиг:",[77,2404,2406],{"className":79,"code":2405,"language":81,"meta":82,"style":82},"sudo cat /etc/ssh/sshd_config | grep -E \"^(PermitRootLogin|PasswordAuthentication|PubkeyAuthentication|AllowUsers|DenyUsers)\"\n",[39,2407,2408],{"__ignoreMap":82},[86,2409,2410,2412,2415,2418,2420,2422,2425],{"class":88,"line":89},[86,2411,1284],{"class":92},[86,2413,2414],{"class":96}," cat",[86,2416,2417],{"class":96}," /etc/ssh/sshd_config",[86,2419,2186],{"class":2137},[86,2421,2189],{"class":92},[86,2423,2424],{"class":1339}," -E",[86,2426,2427],{"class":96}," \"^(PermitRootLogin|PasswordAuthentication|PubkeyAuthentication|AllowUsers|DenyUsers)\"\n",[2150,2429],{},"Ключевые параметры:",[115,2432,2433,2448,2457,2470,2480],{},[31,2434,2435,2438,2439,312,2442,2270,2445,2447],{},[39,2436,2437],{},"PasswordAuthentication"," — ",[39,2440,2441],{},"yes",[39,2443,2444],{},"no",[39,2446,2444],{},", нужен работающий публичный ключ.",[31,2449,2450,2453,2454,2456],{},[39,2451,2452],{},"PubkeyAuthentication"," — должен быть ",[39,2455,2441],{}," для работы с ключами.",[31,2458,2459,2438,2462,2465,2466,312,2468,151],{},[39,2460,2461],{},"PermitRootLogin",[39,2463,2464],{},"prohibit-password"," (разрешает только ключевую), ",[39,2467,2441],{},[39,2469,2444],{},[31,2471,2472,2475,2476,2479],{},[39,2473,2474],{},"AllowUsers"," / ",[39,2477,2478],{},"AllowGroups"," — если указаны, только перечисленные пользователи/группы могут подключаться.",[31,2481,2482,2485,2486,163],{},[39,2483,2484],{},"Port"," — нестандартный порт (если изменён, подключайтесь через него: ",[39,2487,2488],{},"ssh -p \u003Cport> user@host",[2150,2490],{},[34,2492,2493],{},"После любых изменений перезапустите демон:",[77,2495,2497],{"className":79,"code":2496,"language":81,"meta":82,"style":82},"sudo systemctl restart sshd\n# Или для старого sysvinit:\n# sudo service ssh restart\n",[39,2498,2499,2512,2517],{"__ignoreMap":82},[86,2500,2501,2503,2506,2509],{"class":88,"line":89},[86,2502,1284],{"class":92},[86,2504,2505],{"class":96}," systemctl",[86,2507,2508],{"class":96}," restart",[86,2510,2511],{"class":96}," sshd\n",[86,2513,2514],{"class":88,"line":790},[86,2515,2516],{"class":2172},"# Или для старого sysvinit:\n",[86,2518,2519],{"class":88,"line":1463},[86,2520,2521],{"class":2172},"# sudo service ssh restart\n",[31,2523,2524,2527,2528,2531,2532,2605,2607,2608],{},[34,2525,2526],{},"Проверьте права на файлы пользователя на сервере:","\nSSH-демон очень строг к правам. Подключитесь к консоли и проверьте для целевого пользователя (например, ",[39,2529,2530],{},"ubuntu","):",[77,2533,2535],{"className":79,"code":2534,"language":81,"meta":82,"style":82},"# Права на домашнюю директорию\nls -ld /home/ubuntu\n# Ожидается: drwxr-xr-x (755) или drwx------ (700). НЕ должно быть записи для группы и других (например, 777).\n\n# Права на папку .ssh\nls -ld /home/ubuntu/.ssh\n# Ожидается: drwx------ (700)\n\n# Права на файл authorized_keys\nls -l /home/ubuntu/.ssh/authorized_keys\n# Ожидается: -rw------- (600)\n",[39,2536,2537,2542,2553,2558,2562,2567,2576,2581,2585,2590,2600],{"__ignoreMap":82},[86,2538,2539],{"class":88,"line":89},[86,2540,2541],{"class":2172},"# Права на домашнюю директорию\n",[86,2543,2544,2547,2550],{"class":88,"line":790},[86,2545,2546],{"class":92},"ls",[86,2548,2549],{"class":1339}," -ld",[86,2551,2552],{"class":96}," /home/ubuntu\n",[86,2554,2555],{"class":88,"line":1463},[86,2556,2557],{"class":2172},"# Ожидается: drwxr-xr-x (755) или drwx------ (700). НЕ должно быть записи для группы и других (например, 777).\n",[86,2559,2560],{"class":88,"line":1469},[86,2561,1466],{"emptyLinePlaceholder":851},[86,2563,2564],{"class":88,"line":1475},[86,2565,2566],{"class":2172},"# Права на папку .ssh\n",[86,2568,2569,2571,2573],{"class":88,"line":1481},[86,2570,2546],{"class":92},[86,2572,2549],{"class":1339},[86,2574,2575],{"class":96}," /home/ubuntu/.ssh\n",[86,2577,2578],{"class":88,"line":1486},[86,2579,2580],{"class":2172},"# Ожидается: drwx------ (700)\n",[86,2582,2583],{"class":88,"line":1492},[86,2584,1466],{"emptyLinePlaceholder":851},[86,2586,2587],{"class":88,"line":1498},[86,2588,2589],{"class":2172},"# Права на файл authorized_keys\n",[86,2591,2592,2594,2597],{"class":88,"line":1504},[86,2593,2546],{"class":92},[86,2595,2596],{"class":1339}," -l",[86,2598,2599],{"class":96}," /home/ubuntu/.ssh/authorized_keys\n",[86,2601,2602],{"class":88,"line":1510},[86,2603,2604],{"class":2172},"# Ожидается: -rw------- (600)\n",[2150,2606],{},"Если права шире, исправьте:",[77,2609,2611],{"className":79,"code":2610,"language":81,"meta":82,"style":82},"sudo chmod 700 /home/ubuntu/.ssh\nsudo chmod 600 /home/ubuntu/.ssh/authorized_keys\nsudo chown -R ubuntu:ubuntu /home/ubuntu/.ssh\n",[39,2612,2613,2625,2636],{"__ignoreMap":82},[86,2614,2615,2617,2620,2623],{"class":88,"line":89},[86,2616,1284],{"class":92},[86,2618,2619],{"class":96}," chmod",[86,2621,2622],{"class":1339}," 700",[86,2624,2575],{"class":96},[86,2626,2627,2629,2631,2634],{"class":88,"line":790},[86,2628,1284],{"class":92},[86,2630,2619],{"class":96},[86,2632,2633],{"class":1339}," 600",[86,2635,2599],{"class":96},[86,2637,2638,2640,2643,2646,2649],{"class":88,"line":1463},[86,2639,1284],{"class":92},[86,2641,2642],{"class":96}," chown",[86,2644,2645],{"class":1339}," -R",[86,2647,2648],{"class":96}," ubuntu:ubuntu",[86,2650,2575],{"class":96},[15,2652,2654],{"id":2653},"шаг-4-проверка-правил-брандмауэра-и-selinuxapparmor","Шаг 4: Проверка правил брандмауэра и SELinux/AppArmor",[20,2656,2657],{},"Брандмауэр на сервере может блокировать входящие соединения на порт 22.",[28,2659,2660,2866],{},[31,2661,2662,2665],{},[34,2663,2664],{},"Проверьте активные правила:",[115,2666,2667,2728,2783],{},[31,2668,2669,2672,2673,2688,2689,312,2692,2695,2696,312,2698,2701,2702],{},[34,2670,2671],{},"firewalld"," (RHEL/CentOS 7+, Fedora):\n",[77,2674,2676],{"className":79,"code":2675,"language":81,"meta":82,"style":82},"sudo firewall-cmd --list-all\n",[39,2677,2678],{"__ignoreMap":82},[86,2679,2680,2682,2685],{"class":88,"line":89},[86,2681,1284],{"class":92},[86,2683,2684],{"class":96}," firewall-cmd",[86,2686,2687],{"class":1339}," --list-all\n","\nВ выводе в секции ",[39,2690,2691],{},"services:",[39,2693,2694],{},"ports:"," должна быть строка ",[39,2697,2085],{},[39,2699,2700],{},"22/tcp",". Если нет, добавьте:\n",[77,2703,2705],{"className":79,"code":2704,"language":81,"meta":82,"style":82},"sudo firewall-cmd --permanent --add-service=ssh\nsudo firewall-cmd --reload\n",[39,2706,2707,2719],{"__ignoreMap":82},[86,2708,2709,2711,2713,2716],{"class":88,"line":89},[86,2710,1284],{"class":92},[86,2712,2684],{"class":96},[86,2714,2715],{"class":1339}," --permanent",[86,2717,2718],{"class":1339}," --add-service=ssh\n",[86,2720,2721,2723,2725],{"class":88,"line":790},[86,2722,1284],{"class":92},[86,2724,2684],{"class":96},[86,2726,2727],{"class":1339}," --reload\n",[31,2729,2730,2733,2734,2752,2753,2756,2757],{},[34,2731,2732],{},"ufw"," (Ubuntu/Debian по умолчанию):\n",[77,2735,2737],{"className":79,"code":2736,"language":81,"meta":82,"style":82},"sudo ufw status verbose\n",[39,2738,2739],{"__ignoreMap":82},[86,2740,2741,2743,2746,2749],{"class":88,"line":89},[86,2742,1284],{"class":92},[86,2744,2745],{"class":96}," ufw",[86,2747,2748],{"class":96}," status",[86,2750,2751],{"class":96}," verbose\n","\nДолжна быть строка ",[39,2754,2755],{},"22/tcp (SSH) ALLOW IN",". Если нет:\n",[77,2758,2760],{"className":79,"code":2759,"language":81,"meta":82,"style":82},"sudo ufw allow ssh\nsudo ufw reload\n",[39,2761,2762,2774],{"__ignoreMap":82},[86,2763,2764,2766,2768,2771],{"class":88,"line":89},[86,2765,1284],{"class":92},[86,2767,2745],{"class":96},[86,2769,2770],{"class":96}," allow",[86,2772,2773],{"class":96}," ssh\n",[86,2775,2776,2778,2780],{"class":88,"line":790},[86,2777,1284],{"class":92},[86,2779,2745],{"class":96},[86,2781,2782],{"class":96}," reload\n",[31,2784,2785,2788,2789,2819,2820,2823,2824,2827,2828],{},[34,2786,2787],{},"iptables"," (legacy):\n",[77,2790,2792],{"className":79,"code":2791,"language":81,"meta":82,"style":82},"sudo iptables -L INPUT -n -v | grep 22\n",[39,2793,2794],{"__ignoreMap":82},[86,2795,2796,2798,2801,2804,2807,2810,2813,2815,2817],{"class":88,"line":89},[86,2797,1284],{"class":92},[86,2799,2800],{"class":96}," iptables",[86,2802,2803],{"class":1339}," -L",[86,2805,2806],{"class":96}," INPUT",[86,2808,2809],{"class":1339}," -n",[86,2811,2812],{"class":1339}," -v",[86,2814,2186],{"class":2137},[86,2816,2189],{"class":92},[86,2818,2263],{"class":1339},"\nИщите правило с ",[39,2821,2822],{},"ACCEPT"," для порта 22. Если правил нет или стоит ",[39,2825,2826],{},"DROP",", добавьте:\n",[77,2829,2831],{"className":79,"code":2830,"language":81,"meta":82,"style":82},"sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT\n# Сохраните правила в зависимости от дистрибутива (iptables-save, netfilter-persistent)\n",[39,2832,2833,2861],{"__ignoreMap":82},[86,2834,2835,2837,2839,2842,2844,2846,2849,2852,2855,2858],{"class":88,"line":89},[86,2836,1284],{"class":92},[86,2838,2800],{"class":96},[86,2840,2841],{"class":1339}," -A",[86,2843,2806],{"class":96},[86,2845,1385],{"class":1339},[86,2847,2848],{"class":96}," tcp",[86,2850,2851],{"class":1339}," --dport",[86,2853,2854],{"class":1339}," 22",[86,2856,2857],{"class":1339}," -j",[86,2859,2860],{"class":96}," ACCEPT\n",[86,2862,2863],{"class":88,"line":790},[86,2864,2865],{"class":2172},"# Сохраните правила в зависимости от дистрибутива (iptables-save, netfilter-persistent)\n",[31,2867,2868,2871],{},[34,2869,2870],{},"Проверьте SELinux (RHEL/CentOS/Fedora) или AppArmor (Ubuntu/Debian):",[115,2872,2873,2939],{},[31,2874,2875,2878,2887,2888,2891,2892,2895,2896,2910,2911,2914,2915,2438,2918,2921,2922],{},[34,2876,2877],{},"SELinux:",[77,2879,2881],{"className":79,"code":2880,"language":81,"meta":82,"style":82},"getenforce\n",[39,2882,2883],{"__ignoreMap":82},[86,2884,2885],{"class":88,"line":89},[86,2886,2880],{"class":92},"\nЕсли ",[39,2889,2890],{},"Enforcing",", проверьте контекст безопасности папки ",[39,2893,2894],{},".ssh",":\n",[77,2897,2899],{"className":79,"code":2898,"language":81,"meta":82,"style":82},"ls -laZ /home/ubuntu/.ssh\n",[39,2900,2901],{"__ignoreMap":82},[86,2902,2903,2905,2908],{"class":88,"line":89},[86,2904,2546],{"class":92},[86,2906,2907],{"class":1339}," -laZ",[86,2909,2575],{"class":96},"\nПравильный контекст для домашней директории пользователя — ",[39,2912,2913],{},"unconfined_u:object_r:user_home_t:s0",". Для ",[39,2916,2917],{},"authorized_keys",[39,2919,2920],{},"ssh_home_t",". Если контекст неправильный, восстановите:\n",[77,2923,2925],{"className":79,"code":2924,"language":81,"meta":82,"style":82},"sudo restorecon -Rv /home/ubuntu/.ssh\n",[39,2926,2927],{"__ignoreMap":82},[86,2928,2929,2931,2934,2937],{"class":88,"line":89},[86,2930,1284],{"class":92},[86,2932,2933],{"class":96}," restorecon",[86,2935,2936],{"class":1339}," -Rv",[86,2938,2575],{"class":96},[31,2940,2941,2944,2945,2963,2964],{},[34,2942,2943],{},"AppArmor:"," Обычно не мешает SSH, но профиль может быть в режиме enforce. Проверьте:\n",[77,2946,2948],{"className":79,"code":2947,"language":81,"meta":82,"style":82},"sudo aa-status | grep ssh\n",[39,2949,2950],{"__ignoreMap":82},[86,2951,2952,2954,2957,2959,2961],{"class":88,"line":89},[86,2953,1284],{"class":92},[86,2955,2956],{"class":96}," aa-status",[86,2958,2186],{"class":2137},[86,2960,2189],{"class":92},[86,2962,2773],{"class":96},"\nЕсли есть проблемы, попробуйте перевести профиль в complain-режим для теста:\n",[77,2965,2967],{"className":79,"code":2966,"language":81,"meta":82,"style":82},"sudo aa-complain /etc/apparmor.d/usr.sbin.sshd\n",[39,2968,2969],{"__ignoreMap":82},[86,2970,2971,2973,2976],{"class":88,"line":89},[86,2972,1284],{"class":92},[86,2974,2975],{"class":96}," aa-complain",[86,2977,2978],{"class":96}," /etc/apparmor.d/usr.sbin.sshd\n",[520,2980],{},[15,2982,2984],{"id":2983},"шаг-5-диагностика-клиентской-стороны-и-ключей","Шаг 5: Диагностика клиентской стороны и ключей",[20,2986,2987],{},"Если сервер в порядке, проблема может быть на стороне клиента.",[28,2989,2990,3028,3062,3107,3200],{},[31,2991,2992,2995],{},[34,2993,2994],{},"Убедитесь, что вы используете правильного пользователя и хост:",[77,2996,2998],{"className":79,"code":2997,"language":81,"meta":82,"style":82},"# Базовая команда\nssh user@server_ip\n# Если используется нестандартный порт\nssh -p 2222 user@server_ip\n",[39,2999,3000,3005,3012,3017],{"__ignoreMap":82},[86,3001,3002],{"class":88,"line":89},[86,3003,3004],{"class":2172},"# Базовая команда\n",[86,3006,3007,3009],{"class":88,"line":790},[86,3008,2085],{"class":92},[86,3010,3011],{"class":96}," user@server_ip\n",[86,3013,3014],{"class":88,"line":1463},[86,3015,3016],{"class":2172},"# Если используется нестандартный порт\n",[86,3018,3019,3021,3023,3026],{"class":88,"line":1469},[86,3020,2085],{"class":92},[86,3022,1385],{"class":1339},[86,3024,3025],{"class":1339}," 2222",[86,3027,3011],{"class":96},[31,3029,3030,3033,3047,3049,3050,3053,3054,3057,3058,3061],{},[34,3031,3032],{},"Включите подробное логирование на клиенте:",[77,3034,3036],{"className":79,"code":3035,"language":81,"meta":82,"style":82},"ssh -vvv user@server_ip\n",[39,3037,3038],{"__ignoreMap":82},[86,3039,3040,3042,3045],{"class":88,"line":89},[86,3041,2085],{"class":92},[86,3043,3044],{"class":1339}," -vvv",[86,3046,3011],{"class":96},[2150,3048],{},"Ключи ",[39,3051,3052],{},"-v"," (до трёх) покажут всю цепочку: попытку аутентификации по ключу, паролю, GSSAPI. Ищите строки ",[39,3055,3056],{},"debug1: Authentications that can continue:"," и ",[39,3059,3060],{},"debug1: Offering public key: ...",". Если ваш ключ не предлагается, проблема в его расположении или правах. Если предлагается, но сервер отказывает — смотрите логи сервера (Шаг 2).",[31,3063,3064,3067,3082,3084,3085,3088,3089,3092,3093,3096,3097,2438,3099,3102,3103,3106],{},[34,3065,3066],{},"Проверьте права на локальные файлы ключей:",[77,3068,3070],{"className":79,"code":3069,"language":81,"meta":82,"style":82},"ls -la ~/.ssh/\n",[39,3071,3072],{"__ignoreMap":82},[86,3073,3074,3076,3079],{"class":88,"line":89},[86,3075,2546],{"class":92},[86,3077,3078],{"class":1339}," -la",[86,3080,3081],{"class":96}," ~/.ssh/\n",[2150,3083],{},"Права на приватный ключ (например, ",[39,3086,3087],{},"id_rsa",") должны быть ",[34,3090,3091],{},"600"," (",[39,3094,3095],{},"-rw-------","). На папку ",[39,3098,2894],{},[34,3100,3101],{},"700",". На публичный ключ (",[39,3104,3105],{},"id_rsa.pub",") — 644 допустим, но лучше 600.",[31,3108,3109,3112,3113,3126,3128,3129,3132,3133,3136,3137],{},[34,3110,3111],{},"Убедитесь, что публичный ключ добавлен на сервер:","\nНа клиенте покажите содержимое публичного ключа:",[77,3114,3116],{"className":79,"code":3115,"language":81,"meta":82,"style":82},"cat ~/.ssh/id_rsa.pub\n",[39,3117,3118],{"__ignoreMap":82},[86,3119,3120,3123],{"class":88,"line":89},[86,3121,3122],{"class":92},"cat",[86,3124,3125],{"class":96}," ~/.ssh/id_rsa.pub\n",[2150,3127],{},"Скопируйте вывод и сравните с содержимым файла ",[39,3130,3131],{},"~/.ssh/authorized_keys"," на сервере. Строка должна совпадать ",[34,3134,3135],{},"полностью"," (без лишних пробелов или переносов). Лучше всего перезаписать ключ на сервер:",[77,3138,3140],{"className":79,"code":3139,"language":81,"meta":82,"style":82},"# На клиенте (копируем ключ в буфер обмена)\ncat ~/.ssh/id_rsa.pub | xclip -selection clipboard  # для Linux с xclip\n# Или просто откройте файл и скопируйте вручную.\n\n# На сервере (через консоль)\necho \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...\" >> /home/ubuntu/.ssh/authorized_keys\n# Замените ... на реальную строку ключа. Убедитесь, что ключ добавляется с новой строки.\n",[39,3141,3142,3147,3168,3173,3177,3182,3195],{"__ignoreMap":82},[86,3143,3144],{"class":88,"line":89},[86,3145,3146],{"class":2172},"# На клиенте (копируем ключ в буфер обмена)\n",[86,3148,3149,3151,3154,3156,3159,3162,3165],{"class":88,"line":790},[86,3150,3122],{"class":92},[86,3152,3153],{"class":96}," ~/.ssh/id_rsa.pub",[86,3155,2186],{"class":2137},[86,3157,3158],{"class":92}," xclip",[86,3160,3161],{"class":1339}," -selection",[86,3163,3164],{"class":96}," clipboard",[86,3166,3167],{"class":2172},"  # для Linux с xclip\n",[86,3169,3170],{"class":88,"line":1463},[86,3171,3172],{"class":2172},"# Или просто откройте файл и скопируйте вручную.\n",[86,3174,3175],{"class":88,"line":1469},[86,3176,1466],{"emptyLinePlaceholder":851},[86,3178,3179],{"class":88,"line":1475},[86,3180,3181],{"class":2172},"# На сервере (через консоль)\n",[86,3183,3184,3187,3190,3193],{"class":88,"line":1481},[86,3185,3186],{"class":1339},"echo",[86,3188,3189],{"class":96}," \"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC...\"",[86,3191,3192],{"class":2137}," >>",[86,3194,2599],{"class":96},[86,3196,3197],{"class":88,"line":1486},[86,3198,3199],{"class":2172},"# Замените ... на реальную строку ключа. Убедитесь, что ключ добавляется с новой строки.\n",[31,3201,3202,3205,3206],{},[34,3203,3204],{},"Проверьте, не блокирует ли вас fail2ban или аналоги:","\nЕсли вы многократно пытались подключиться с неверным паролем/ключом, IP мог быть заблокирован.",[77,3207,3209],{"className":79,"code":3208,"language":81,"meta":82,"style":82},"sudo fail2ban-client status sshd\nsudo fail2ban-client set sshd unbanip \u003Cваш_клиентский_IP>\n",[39,3210,3211,3222],{"__ignoreMap":82},[86,3212,3213,3215,3218,3220],{"class":88,"line":89},[86,3214,1284],{"class":92},[86,3216,3217],{"class":96}," fail2ban-client",[86,3219,2748],{"class":96},[86,3221,2511],{"class":96},[86,3223,3224,3226,3228,3231,3234,3237,3239,3242,3244],{"class":88,"line":790},[86,3225,1284],{"class":92},[86,3227,3217],{"class":96},[86,3229,3230],{"class":96}," set",[86,3232,3233],{"class":96}," sshd",[86,3235,3236],{"class":96}," unbanip",[86,3238,2138],{"class":2137},[86,3240,3241],{"class":96},"ваш_клиентский_I",[86,3243,471],{"class":2144},[86,3245,2148],{"class":2137},[15,3247,645],{"id":644},[20,3249,3250],{},"После применения всех необходимых исправлений попробуйте подключиться снова с обычной командой:",[77,3252,3254],{"className":79,"code":3253,"language":81,"meta":82,"style":82},"ssh user@server_ip\n",[39,3255,3256],{"__ignoreMap":82},[86,3257,3258,3260],{"class":88,"line":89},[86,3259,2085],{"class":92},[86,3261,3011],{"class":96},[20,3263,3264,3265,3268,3269,163],{},"Если используется нестандартный порт, не забудьте флаг ",[39,3266,3267],{},"-p",". Успешное подключение завершится приглашением командной строки сервера (",[39,3270,3271],{},"user@server_ip:~$",[20,3273,3274],{},[34,3275,3276],{},"Критерии успеха:",[115,3278,3279,3282,3285],{},[31,3280,3281],{},"Соединение установлено.",[31,3283,3284],{},"Вы видите приглашение оболочки (bash, zsh) удалённого сервера.",[31,3286,3287,3288,2086,3291,312,3293,151],{},"Никаких сообщений об ошибках ",[39,3289,3290],{},"Permission denied",[39,3292,2273],{},[39,3294,3295],{},"Connection timed out",[15,3297,691],{"id":690},[115,3299,3300,3319,3343,3376,3407],{},[31,3301,3302,3307],{},[34,3303,3304],{},[39,3305,3306],{},"ssh: connect to host ... port 22: Connection timed out",[115,3308,3309],{},[31,3310,3311,3314,3315,3318],{},[34,3312,3313],{},"Причина:"," Сетевой пакет не доходит. Проверьте ping, маршрутизацию (",[39,3316,3317],{},"traceroute","), правила облачного Security Group и локального/промежуточного брандмауэра.",[31,3320,3321,3326],{},[34,3322,3323],{},[39,3324,3325],{},"ssh: connect to host ... port 22: Connection refused",[115,3327,3328],{},[31,3329,3330,3332,3333,3335,3336,3339,3340,163],{},[34,3331,3313],{}," SSH-демон не слушает порт 22 на внешнем интерфейсе. Проверьте ",[39,3334,2229],{}," (параметр ",[39,3337,3338],{},"ListenAddress",") и убедитесь, что демон запущен (",[39,3341,3342],{},"sudo systemctl status sshd",[31,3344,3345,3350],{},[34,3346,3347],{},[39,3348,3349],{},"Permission denied (publickey,password).",[115,3351,3352],{},[31,3353,3354,3356,3357,3360,3361,3057,3364,3366,3367,3369,3370,312,3373,163],{},[34,3355,3313],{}," Аутентификация не прошла. Проверьте логи сервера (",[39,3358,3359],{},"/var/log/auth.log","). Убедитесь в правильности ключа, прав на ",[39,3362,3363],{},"~/.ssh",[39,3365,2917],{},", а также в том, что в ",[39,3368,2229],{}," разрешён нужный метод (",[39,3371,3372],{},"PubkeyAuthentication yes",[39,3374,3375],{},"PasswordAuthentication yes",[31,3377,3378,3383],{},[34,3379,3380],{},[39,3381,3382],{},"Received disconnect from ...: 2: Too many authentication failures",[115,3384,3385],{},[31,3386,3387,3389,3390,3393,3394,3397,3398,2895,3401],{},[34,3388,3313],{}," SSH-клиент предложил слишком много ключей (из ",[39,3391,3392],{},"ssh-agent"," или по умолчанию), и сервер отказал. Решение: явно указать ключ (",[39,3395,3396],{},"ssh -i ~/.ssh/id_rsa user@host",") или отключить агент для этого хоста в ",[39,3399,3400],{},"~/.ssh/config",[77,3402,3405],{"className":3403,"code":3404,"language":106},[104],"Host your-server\n    IdentitiesOnly yes\n    IdentityFile ~/.ssh/id_rsa\n",[39,3406,3404],{"__ignoreMap":82},[31,3408,3409,3414],{},[34,3410,3411],{},[39,3412,3413],{},"WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!",[115,3415,3416],{},[31,3417,3418,3420,3421,3424,3425,3428],{},[34,3419,3313],{}," Изменился fingerprint хоста (сервер переустановлен, IP перешёл к другому владельцу). ",[34,3422,3423],{},"Не игнорируйте это предупреждение!"," Удалите старую запись из ",[39,3426,3427],{},"~/.ssh/known_hosts"," (найдите строку с IP/доменом и удалите её) и подключитесь заново.",[15,3430,3432],{"id":3431},"дополнительные-ресурсы","Дополнительные ресурсы",[115,3434,3435,3443,3458,3466,3477,3485],{},[31,3436,3437,3442],{},[34,3438,3439],{},[39,3440,3441],{},"man sshd_config"," — официальная документация по конфигурационному файлу демона.",[31,3444,3445,3450,3451,2086,3453,2086,3456,163],{},[34,3446,3447],{},[39,3448,3449],{},"man ssh"," — документация по клиенту и его параметрам (",[39,3452,3052],{},[39,3454,3455],{},"-i",[39,3457,3267],{},[31,3459,3460,3465],{},[34,3461,3462],{},[39,3463,3464],{},"man ssh-keygen"," — управление SSH-ключами (генерация, конвертация).",[31,3467,3468,3471,3472],{},[34,3469,3470],{},"Документация OpenSSH:"," ",[207,3473,3474],{"href":3474,"rel":3475},"https://www.openssh.com/manual.html",[3476],"nofollow",[31,3478,3479,3471,3482],{},[34,3480,3481],{},"Гайд по усилению безопасности SSH:",[39,3483,3484],{},"/guides/linux/openssh-hardening",[31,3486,3487,3471,3490],{},[34,3488,3489],{},"Устранение неполадок с firewall в Linux:",[39,3491,3492],{},"/guides/linux/firewall-configuration",[786,3494,3495],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}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);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":82,"searchDepth":790,"depth":790,"links":3497},[3498,3499,3500,3501,3502,3503,3504,3505,3506,3507],{"id":17,"depth":790,"text":18},{"id":25,"depth":790,"text":26},{"id":2114,"depth":790,"text":2115},{"id":2289,"depth":790,"text":2290},{"id":2387,"depth":790,"text":2388},{"id":2653,"depth":790,"text":2654},{"id":2983,"depth":790,"text":2984},{"id":644,"depth":790,"text":645},{"id":690,"depth":790,"text":691},{"id":3431,"depth":790,"text":3432},"2026-02-16 19:54:54","Не можете подключиться к серверу по SSH? Наше пошаговое руководство поможет диагностировать и исправить ошибки за 15 минут. Проверенные решения для Linux.",[3511,3514,3517],{"question":3512,"answer":3513},"Что делать, если ssh выдает 'Permission denied (publickey)'?","Эта ошибка означает, что сервер не принял ваш SSH-ключ. Убедитесь, что публичный ключ (`~/.ssh/id_rsa.pub`) присутствует в файле `~/.ssh/authorized_keys` на сервере и права на файлы и папку строгие (700 на ~/.ssh, 600 на authorized_keys).",{"question":3515,"answer":3516},"Порт 22 закрыт, но я уверен, что демон sshd работает. В чём проблема?","Скорее всего, брандмауэр (firewalld, ufw, iptables) блокирует порт. Проверьте активные правила (`sudo firewall-cmd --list-all` для firewalld или `sudo ufw status` для ufw) и откройте порт 22/tcp.",{"question":3518,"answer":3519},"Можно ли использовать SSH без пароля, но с ключом, если у меня нет прав суперпользователя на сервере?","Да, если администратор сервера добавил ваш публичный ключ в `authorized_keys` для вашего пользователя. Ваша локальная side (клиент) должна иметь приватный ключ, и права на `~/.ssh` и ключи должны быть корректными (600/700).",[3521,3524,3527,3530,3533],{"name":3522,"text":3523},"Проверка базовой сетевой доступности","Убедитесь, что сервер доступен по сети и слушает нужный порт. Используйте `ping` и `nc` (netcat) для проверки.",{"name":3525,"text":3526},"Анализ логов SSH-демона на сервере","Подключитесь к консоли сервера (KVM, IPMI) или посмотрите логи через систему мониторинга. Изучите `/var/log/auth.log` (Debian/Ubuntu) или `/var/log/secure` (RHEL/CentOS) на предмет ошибок аутентификации.",{"name":3528,"text":3529},"Валидация конфигурации SSH-демона и прав доступа","Проверьте основные настройки в `/etc/ssh/sshd_config` (например, `PasswordAuthentication`, `PubkeyAuthentication`, `PermitRootLogin`). Убедитесь в корректности прав на домашнюю директорию пользователя и папку `~/.ssh`.",{"name":3531,"text":3532},"Проверка правил брандмауэра и SELinux/AppArmor","Убедитесь, что порт SSH (по умолчанию 22) открыт в брандмауэре. Проверьте статус SELinux (`getenforce`) или AppArmor, они могут блокировать доступ.",{"name":3534,"text":3535},"Диагностика клиентской стороны и ключей","Проверьте, что клиент использует правильный ключ (`ssh -i /путь/к/ключу`) и пользователя. Убедитесь, что приватный ключ имеет права 600. Включите подробное логирование на клиенте (`ssh -vvv`).",[3537,3538,3539,3540,3541,3542,3543,3544],"ssh не подключается linux","ошибка ssh connection refused","ssh permission denied publickey","как исправить ssh timeout","диагностика ssh linux","ssh ошибка 22 порт","настройка ssh сервера ubuntu","проблемы с ssh ключом",{},[3484,3547,3492],"/errors/linux/ssh-connection-timeout",{"title":2039,"description":3509},"guides/linux/ssh-troubleshooting","Этот гайд предоставляет системный подход к диагностике и устранению распространённых проблем с SSH-подключениями в Linux. Вы научитесь проверять сетевую доступность, настройки демона, аутентификацию и брандмауэр, чтобы быстро восстановить доступ к удалённым серверам.",[3552,2085,3553,3554,3555],"гайды linux","сетевая безопасность","администрирование","troubleshooting","-5pHXTs4737cbEibuJTuw_YkMaOCpaq4JkdOXaO2Ws8"]