HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p><strong>SSH - защищенный протокол для удаленного доступа к компьютерам. Через SSH можно выполнять операции в командной строке компьютера, который физически находится в другом месте.</strong></p>
1 <p><strong>SSH - защищенный протокол для удаленного доступа к компьютерам. Через SSH можно выполнять операции в командной строке компьютера, который физически находится в другом месте.</strong></p>
2 <p>Иными словами, SSH - это дистанционная командная строка. Визуально вы работаете на своем компьютере, но в реальности - на другом.</p>
2 <p>Иными словами, SSH - это дистанционная командная строка. Визуально вы работаете на своем компьютере, но в реальности - на другом.</p>
3 <h2>Содержание</h2>
3 <h2>Содержание</h2>
4 <ul><li><a>Что значит "протокол"?</a></li>
4 <ul><li><a>Что значит "протокол"?</a></li>
5 <li><a>Что значит "защищенный протокол"?</a></li>
5 <li><a>Что значит "защищенный протокол"?</a></li>
6 <li><a>Для чего нужен SSH?</a></li>
6 <li><a>Для чего нужен SSH?</a></li>
7 <li><a>Как подключаться по SSH?</a></li>
7 <li><a>Как подключаться по SSH?</a></li>
8 <li><a>Подключение по SSH по паролю</a></li>
8 <li><a>Подключение по SSH по паролю</a></li>
9 <li><a>Подключение по SSH по ключу, без пароля</a></li>
9 <li><a>Подключение по SSH по ключу, без пароля</a></li>
10 <li><a>ssh-agent</a></li>
10 <li><a>ssh-agent</a></li>
11 <li><a>Форвардинг (проброс) ключей</a></li>
11 <li><a>Форвардинг (проброс) ключей</a></li>
12 <li><a>Частые вопросы</a></li>
12 <li><a>Частые вопросы</a></li>
13 <li><a>Дополнительные ссылки</a></li>
13 <li><a>Дополнительные ссылки</a></li>
14 </ul><h2>Что значит "протокол"?</h2>
14 </ul><h2>Что значит "протокол"?</h2>
15 <p>Протокол - это набор соглашений, правил, по которым разные программы могут обмениваться информацией. SSH - это набор правил, который известен и вашему компьютеру, и физически отдаленному компьютеру.</p>
15 <p>Протокол - это набор соглашений, правил, по которым разные программы могут обмениваться информацией. SSH - это набор правил, который известен и вашему компьютеру, и физически отдаленному компьютеру.</p>
16 <blockquote><p><strong>Пример</strong>: вы вводите команду удаления файла. Эта команда передается на другой компьютер и выполняется там. Ответ (или сообщение об ошибке) возвращается и показывается на вашем компьютере.</p>
16 <blockquote><p><strong>Пример</strong>: вы вводите команду удаления файла. Эта команда передается на другой компьютер и выполняется там. Ответ (или сообщение об ошибке) возвращается и показывается на вашем компьютере.</p>
17 </blockquote><h2>Что значит "защищенный протокол"?</h2>
17 </blockquote><h2>Что значит "защищенный протокол"?</h2>
18 <p>По такому протоколу работают сайты с HTTPS и онлайн-банкинг. При защищенном соединении все данные передаются в зашифрованном виде. Даже если злоумышленник перехватит информацию, он не сможет расшифровать ее.</p>
18 <p>По такому протоколу работают сайты с HTTPS и онлайн-банкинг. При защищенном соединении все данные передаются в зашифрованном виде. Даже если злоумышленник перехватит информацию, он не сможет расшифровать ее.</p>
19 <h2>Для чего нужен SSH?</h2>
19 <h2>Для чего нужен SSH?</h2>
20 <p>Не всегда есть возможность физически находиться у компьютера, с которым нужно работать. Например, если вы хотите создать свой сайт, то он будет размещен на компьютере хостинг-провайдера. Этот компьютер может находиться на другом конце света. Чтобы запускать команды с него без физического доступа, вам понадобится SSH-ключ.</p>
20 <p>Не всегда есть возможность физически находиться у компьютера, с которым нужно работать. Например, если вы хотите создать свой сайт, то он будет размещен на компьютере хостинг-провайдера. Этот компьютер может находиться на другом конце света. Чтобы запускать команды с него без физического доступа, вам понадобится SSH-ключ.</p>
21 <h2>Как подключаться по SSH?</h2>
21 <h2>Как подключаться по SSH?</h2>
22 <p>Для подключения к удаленной машине по SSH нужен клиент - специальная программа. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, поэтому достаточно просто открыть терминал.</p>
22 <p>Для подключения к удаленной машине по SSH нужен клиент - специальная программа. В *nix-подобных системах (Linux, macOS) клиент обычно установлен в системе по умолчанию, поэтому достаточно просто открыть терминал.</p>
23 <p>Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт. Вот как выглядит команда при использовании консольного клиента (в терминале):</p>
23 <p>Для подключения нужно указать адрес сервера и, опционально, имя пользователя и порт. Вот как выглядит команда при использовании консольного клиента (в терминале):</p>
24 <p>Например, для подключения к серверу 52.307.149.244 в аккаунт ivan нужно ввести:</p>
24 <p>Например, для подключения к серверу 52.307.149.244 в аккаунт ivan нужно ввести:</p>
25 <p>Если не указывать порт, то будет использован порт SSH по умолчанию - 22. Используемый порт задается при настройке SSH-сервера - программы, которая запущена на удаленном компьютере и ожидает подключения извне.</p>
25 <p>Если не указывать порт, то будет использован порт SSH по умолчанию - 22. Используемый порт задается при настройке SSH-сервера - программы, которая запущена на удаленном компьютере и ожидает подключения извне.</p>
26 <h3>Fingerprint</h3>
26 <h3>Fingerprint</h3>
27 <p>При первом подключении появится сообщение:</p>
27 <p>При первом подключении появится сообщение:</p>
28 <p>The authenticity of host '52.307.149.244 (52.307.149.244)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes</p>
28 <p>The authenticity of host '52.307.149.244 (52.307.149.244)' can't be established. ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. Are you sure you want to continue connecting (yes/no)? yes</p>
29 <p>Введите yes в первый раз.</p>
29 <p>Введите yes в первый раз.</p>
30 <p>Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов - fingerprint ("отпечатки пальцев"). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Представьте, что кто-то внёс изменения в систему, например:</p>
30 <p>Это нужно для повышения безопасности. При настройке SSH-сервера создается уникальная комбинация символов - fingerprint ("отпечатки пальцев"). Ваш компьютер запоминает эту комбинацию и сверяет ее при каждом новом соединении. Представьте, что кто-то внёс изменения в систему, например:</p>
31 <ul><li>Переустановил SSH-сервер</li>
31 <ul><li>Переустановил SSH-сервер</li>
32 <li>Переустановил всю операционную систему</li>
32 <li>Переустановил всю операционную систему</li>
33 <li>Заменил удаленный компьютер, сохранив его адрес</li>
33 <li>Заменил удаленный компьютер, сохранив его адрес</li>
34 </ul><p>Даже в этом случае вы заметите изменения, потому что fingerprint тоже изменится.</p>
34 </ul><p>Даже в этом случае вы заметите изменения, потому что fingerprint тоже изменится.</p>
35 <p>Если fingerprint не меняется, то такое сообщение не будет появляться.</p>
35 <p>Если fingerprint не меняется, то такое сообщение не будет появляться.</p>
36 <h2>Подключение по SSH по паролю</h2>
36 <h2>Подключение по SSH по паролю</h2>
37 <p>Простейший вариант - подключение по паролю. После ввода команды ssh система запросит пароль:</p>
37 <p>Простейший вариант - подключение по паролю. После ввода команды ssh система запросит пароль:</p>
38 <p>ivan@52.307.149.244's password:</p>
38 <p>ivan@52.307.149.244's password:</p>
39 <p>Пароль придется вводить каждый раз.</p>
39 <p>Пароль придется вводить каждый раз.</p>
40 <h2>Подключение по SSH по ключу, без пароля</h2>
40 <h2>Подключение по SSH по ключу, без пароля</h2>
41 <p>Для удобного подключения по SSH (и многим другим сервисам) без ввода пароля можно использовать ключи.</p>
41 <p>Для удобного подключения по SSH (и многим другим сервисам) без ввода пароля можно использовать ключи.</p>
42 <p>Нужно создать пару ключей:<strong>приватный</strong>(закрытый) ключ и<strong>публичный</strong>(открытый) ключ. Приватный ключ нужно хранить и никогда никому не показывать. Публичный ключ можно показывать всем и распространять свободно.</p>
42 <p>Нужно создать пару ключей:<strong>приватный</strong>(закрытый) ключ и<strong>публичный</strong>(открытый) ключ. Приватный ключ нужно хранить и никогда никому не показывать. Публичный ключ можно показывать всем и распространять свободно.</p>
43 <p>Эти<em>ключи связаны друг с другом</em>таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим. Например, если ваш друг зашифрует письмо вашим публичным ключом, то прочитать его сможете только вы, потому что для этого нужен ваш приватный ключ. И наоборот: если вы зашифруете что-то своим приватным ключом, то расшифровать его можно только вашим публичным ключом. Так как публичный ключ доступен всем, любой может расшифровать это сообщение. Но он может быть уверен, что сообщение пришло именно от вас. В этом заключается идея цифровой подписи.</p>
43 <p>Эти<em>ключи связаны друг с другом</em>таким образом, что зашифровав информацию одним ключом, расшифровать ее можно только другим. Например, если ваш друг зашифрует письмо вашим публичным ключом, то прочитать его сможете только вы, потому что для этого нужен ваш приватный ключ. И наоборот: если вы зашифруете что-то своим приватным ключом, то расшифровать его можно только вашим публичным ключом. Так как публичный ключ доступен всем, любой может расшифровать это сообщение. Но он может быть уверен, что сообщение пришло именно от вас. В этом заключается идея цифровой подписи.</p>
44 <h3>Генерация ключей</h3>
44 <h3>Генерация ключей</h3>
45 <p>Создадим пару ключей:</p>
45 <p>Создадим пару ключей:</p>
46 <p>Программа запустится и спросит, куда сохранять ключи:</p>
46 <p>Программа запустится и спросит, куда сохранять ключи:</p>
47 <p>Generating public/private rsa key pair. Enter file in which to save the key (/home/demo/.ssh/id_rsa):</p>
47 <p>Generating public/private rsa key pair. Enter file in which to save the key (/home/demo/.ssh/id_rsa):</p>
48 <p>Нажмите Enter для сохранения в стандартное место - директорию<em>.ssh/id_rsa</em>в вашей домашней директории.</p>
48 <p>Нажмите Enter для сохранения в стандартное место - директорию<em>.ssh/id_rsa</em>в вашей домашней директории.</p>
49 <p>Программа запросит passphrase. Это вроде пароля для ключа. Можно просто нажать Enter и пропустить этот шаг. Или ввести passphrase - тогда его нужно будет вводить каждый раз, когда используется ключ.</p>
49 <p>Программа запросит passphrase. Это вроде пароля для ключа. Можно просто нажать Enter и пропустить этот шаг. Или ввести passphrase - тогда его нужно будет вводить каждый раз, когда используется ключ.</p>
50 <p>Enter passphrase (empty for no passphrase): Enter same passphrase again:</p>
50 <p>Enter passphrase (empty for no passphrase): Enter same passphrase again:</p>
51 <p>Ключи созданы:</p>
51 <p>Ключи созданы:</p>
52 <p>Your identification has been saved in /home/demo/.ssh/id_rsa. Your public key has been saved in /home/demo/.ssh/id_rsa.pub. The key fingerprint is: 8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | + | | o S . | | o . * + | | o + = O . | | + = = + | | ....Eo+ | +-----------------+</p>
52 <p>Your identification has been saved in /home/demo/.ssh/id_rsa. Your public key has been saved in /home/demo/.ssh/id_rsa.pub. The key fingerprint is: 8c:e9:7c:fa:bf:c4:e5:9c:c9:b8:60:1f:fe:1c:d3:8a root@here The key's randomart image is: +--[ RSA 2048]----+ | | | | | | | + | | o S . | | o . * + | | o + = O . | | + = = + | | ....Eo+ | +-----------------+</p>
53 <p>Теперь у вас есть два файла:</p>
53 <p>Теперь у вас есть два файла:</p>
54 <ul><li><em>~/.ssh/id_rsa</em>- приватный ключ.<strong>Никогда никому и никуда не передавайте его!</strong></li>
54 <ul><li><em>~/.ssh/id_rsa</em>- приватный ключ.<strong>Никогда никому и никуда не передавайте его!</strong></li>
55 <li><em>~/.ssh/id_rsa.pub</em>- публичный ключ. Спокойно распространяйте его.</li>
55 <li><em>~/.ssh/id_rsa.pub</em>- публичный ключ. Спокойно распространяйте его.</li>
56 </ul><p>В Windows можно использовать ssh-gen в подсистеме Ubuntu for Windows или в командной строке Git for Windows.</p>
56 </ul><p>В Windows можно использовать ssh-gen в подсистеме Ubuntu for Windows или в командной строке Git for Windows.</p>
57 <h3>Загрузка публичного ключа на сервер</h3>
57 <h3>Загрузка публичного ключа на сервер</h3>
58 <p>Нужно добавить публичный ключ на сервер в файл<em>~/.ssh/authorized_keys</em>. Самый простой способ - запустить на локальной машине команду для копирования ключа:</p>
58 <p>Нужно добавить публичный ключ на сервер в файл<em>~/.ssh/authorized_keys</em>. Самый простой способ - запустить на локальной машине команду для копирования ключа:</p>
59 <p>Другой способ - подключиться по паролю, открыть в редакторе файл<em>~/.ssh/authorized_keys</em>и добавить в конец текст из вашего файла<em>~/.ssh/id_rsa.pub</em>.</p>
59 <p>Другой способ - подключиться по паролю, открыть в редакторе файл<em>~/.ssh/authorized_keys</em>и добавить в конец текст из вашего файла<em>~/.ssh/id_rsa.pub</em>.</p>
60 <p>Теперь при подключении пароль запрашиваться не будет1.</p>
60 <p>Теперь при подключении пароль запрашиваться не будет1.</p>
61 <p>После включения соединений по ключу<strong>рекомендуется отключить подключение по паролю</strong>.</p>
61 <p>После включения соединений по ключу<strong>рекомендуется отключить подключение по паролю</strong>.</p>
62 <h2>ssh-agent</h2>
62 <h2>ssh-agent</h2>
63 <p>При работе с ключами возможны две неудобные ситуации:</p>
63 <p>При работе с ключами возможны две неудобные ситуации:</p>
64 <ol><li>Если при создании ключа вы указали passphrase (пароль для ключа), то вам придется вводить пароль при каждом подключении</li>
64 <ol><li>Если при создании ключа вы указали passphrase (пароль для ключа), то вам придется вводить пароль при каждом подключении</li>
65 <li>Если у вас есть несколько ключей для разных целей, то при соединении по ssh придется указывать нужный ключ вручную</li>
65 <li>Если у вас есть несколько ключей для разных целей, то при соединении по ssh придется указывать нужный ключ вручную</li>
66 </ol><p>ssh-agent решает эти проблемы. Этот агент аутентификации (authentication agent) работает на фоне в *nix-системах. В некоторых других системах приходится устанавливать и настраивать его автозапуск самостоятельно.</p>
66 </ol><p>ssh-agent решает эти проблемы. Этот агент аутентификации (authentication agent) работает на фоне в *nix-системах. В некоторых других системах приходится устанавливать и настраивать его автозапуск самостоятельно.</p>
67 <p>Если добавить ключ к агенту, то:</p>
67 <p>Если добавить ключ к агенту, то:</p>
68 <ol><li>для него больше не будет спрашиваться passphrase</li>
68 <ol><li>для него больше не будет спрашиваться passphrase</li>
69 <li>не нужно будет вводить ключ вручную - он будет автоматически использован при соответствующем подключении</li>
69 <li>не нужно будет вводить ключ вручную - он будет автоматически использован при соответствующем подключении</li>
70 </ol><p>ssh-add /home/demo/.ssh/id_rsa добавит ключ<em>id_rsa</em>в запущенный в системе агент. Если у него есть passphrase, то агент попросит ввести его.</p>
70 </ol><p>ssh-add /home/demo/.ssh/id_rsa добавит ключ<em>id_rsa</em>в запущенный в системе агент. Если у него есть passphrase, то агент попросит ввести его.</p>
71 <p>Если запустить ssh-add без аргументов, то будут добавлены ключи<em>~/.ssh/id_rsa</em>,<em>~/.ssh/id_dsa</em>,<em>~/.ssh/id_ecdsa</em>,<em>~/.ssh/id_ed25519</em>и<em>~/.ssh/identity</em>.</p>
71 <p>Если запустить ssh-add без аргументов, то будут добавлены ключи<em>~/.ssh/id_rsa</em>,<em>~/.ssh/id_dsa</em>,<em>~/.ssh/id_ecdsa</em>,<em>~/.ssh/id_ed25519</em>и<em>~/.ssh/identity</em>.</p>
72 <p>Список добавленных в агент ключей можно посмотреть командой ssh-add -L:</p>
72 <p>Список добавленных в агент ключей можно посмотреть командой ssh-add -L:</p>
73 <p>ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.</p>
73 <p>ssh-agent привязан к сессии. Поэтому, например, если перезагрузить компьютер, то ключи нужно будет добавлять в агент заново.</p>
74 <h2>Форвардинг (проброс) ключей</h2>
74 <h2>Форвардинг (проброс) ключей</h2>
75 <p>Представим, что вы подключились к удаленному серверу<strong>X</strong>. Дальше вы хотите подключиться с него к другому серверу<strong>Y</strong>- например, чтобы сделать git pull с GitHub. В этом случае придется держать копию ваших ключей на сервере<strong>X</strong>.</p>
75 <p>Представим, что вы подключились к удаленному серверу<strong>X</strong>. Дальше вы хотите подключиться с него к другому серверу<strong>Y</strong>- например, чтобы сделать git pull с GitHub. В этом случае придется держать копию ваших ключей на сервере<strong>X</strong>.</p>
76 <p>Утилита ssh с флагом -A позволяет "пробросить" ключи с подключаемой машины в удаленную:</p>
76 <p>Утилита ssh с флагом -A позволяет "пробросить" ключи с подключаемой машины в удаленную:</p>
77 <p>Ключи, добавленные к агенту аутентификации (ssh-agent), станут доступными на удаленном сервере. При этом файлы-ключи физически не будут находиться на сервере.</p>
77 <p>Ключи, добавленные к агенту аутентификации (ssh-agent), станут доступными на удаленном сервере. При этом файлы-ключи физически не будут находиться на сервере.</p>
78 <h2>Частые вопросы</h2>
78 <h2>Частые вопросы</h2>
79 <h3>Чем Telnet отличается от SSH?</h3>
79 <h3>Чем Telnet отличается от SSH?</h3>
80 <p>Telnet это конкретная программа с графическим интерфейсом, с помощью которой можно соединяться по SSH. Обычно ей пользуются только Windows пользователи, в Linux и MacOS используют консольную утилиту<em>ssh</em>.</p>
80 <p>Telnet это конкретная программа с графическим интерфейсом, с помощью которой можно соединяться по SSH. Обычно ей пользуются только Windows пользователи, в Linux и MacOS используют консольную утилиту<em>ssh</em>.</p>
81 <h2>Дополнительные ссылки</h2>
81 <h2>Дополнительные ссылки</h2>
82 <ol><li><a>Основы SSH / Видео на канале Хекслета</a></li>
82 <ol><li><a>Основы SSH / Видео на канале Хекслета</a></li>
83 <li><a>SSH Essentials: Working with SSH Servers, Clients, and Keys</a></li>
83 <li><a>SSH Essentials: Working with SSH Servers, Clients, and Keys</a></li>
84 <li><a>Памятка пользователям ssh</a></li>
84 <li><a>Памятка пользователям ssh</a></li>
85 </ol><ol><li>Возможность и специфика подключения по ключу зависит от настроек SSH-сервера. Возможно такое, что подключение по ключу запрещено администратором.</li>
85 </ol><ol><li>Возможность и специфика подключения по ключу зависит от настроек SSH-сервера. Возможно такое, что подключение по ключу запрещено администратором.</li>
86 </ol>
86 </ol>