Подключиться к виртуальной машине Linux по SSH

Рекомендуемый способ подключения к виртуальной машине по SSH основан на использовании пары ключей: открытый ключ размещается на виртуальной машине, а закрытый ключ хранится у пользователя. Подключение с помощью пары ключей более безопасно, чем подключение по логину и паролю.

Примечание

В публичных образах Linux, предоставляемых Яндекс.Облаком, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.

Создание пары ключей SSH

Чтобы подключаться к виртуальной машине по SSH, нужна пара ключей: открытый ключ размещается на виртуальной машине, а закрытый ключ хранится у пользователя. Такой способ более безопасен, чем подключение по логину и паролю.

Примечание

В публичных образах Linux, предоставляемых Яндекс.Облаком, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.

Чтобы создать пару ключей:

  1. Откройте терминал.

  2. Создайте новый ключ с помощью команды ssh-keygen:

    $ ssh-keygen -t rsa -b 2048
    

    После выполнения команды вам будет предложено указать имена файлов, в которые будут сохранены ключи и ввести пароль для закрытого ключа. По умолчанию используется имя id_rsa, ключи создаются в директории ~./ssh.

    Публичная часть ключа будет сохранена в файле <имя_ключа>.pub. Вставьте эту часть ключа в поле SSH-ключ при создании новой виртуальной машины через консоль управления.

  1. Запустите cmd.exe или powershell.exe.

  2. Создайте новый ключ с помощью команды ssh-keygen. Выполните команду:

    $ ssh-keygen -t rsa -b 2048
    

После выполнения команды вам будет предложено указать имена файлов, в которые будут сохранены ключи и ввести пароль для закрытого ключа. По умолчанию используется имя id_rsa, ключи создаются в директории C:\Users\<имя_пользователя>\.ssh\.

Публичная часть ключа будет сохранена в файле с названием <имя_ключа>.pub. Скопируйте строку ключа в поле для публичного ключа при создании новой виртуальной машины через консоль управления.

Создание ключей для Windows будет выполняться с помощью приложения PuTTY.

  1. Скачайте и установите PuTTY.

  2. Убедитесь, что директория, куда вы установили PuTTY, присутствует в PATH:

    1. Нажмите правой кнопкой на Мой компьютер. Выберите пункт Свойства.
    2. В открывшемся окне выберите Дополнительные параметры системы, затем Переменные среды (находится в нижней части окна).
    3. В разделе Системные переменные найдите PATH и нажмите Изменить.
    4. В поле Значение переменной допишите путь к директории, куда вы установили PuTTY.
  3. Запустите приложение PuTTYgen.

  4. В качестве типа генерируемой пары выберите RSA и укажите длину 2048. Нажмите Generate и поводите курсором в поле выше до тех пор, пока не закончится создание ключа.

    ssh_generate_key

  5. В поле Key passphrase введите надежный пароль. Повторно введите его в поле ниже.

  6. Нажмите кнопку Save private key и сохраните закрытый ключ. Никогда его никому не передавайте и не говорите никому ключевую фразу от него.

  7. Сохраните ключ в текстовом файле одной строкой. Для этого скопируйте открытый ключ из текстового поля в текстовый файл с названием id_rsa.pub.

  8. При создании виртуальной машины через консоль управления укажите публичный ключ. Для этого откройте файл id_rsa.pub с помощью Notepad и скопируйте значение ключа в поле SSH-ключ.

Подключение к виртуальной машине

Вы можете подключиться к виртуальной машине по протоколу SSH, когда она будет запущена (в статусе RUNNING). Для этого можно использовать утилиту ssh в Linux/macOS/Windows 10 и программу PuTTY для Windows 7/8.

Для подключения необходимо указать публичный адрес виртуальной машины. Публичный IP-адрес можно узнать в консоли управления в поле Публичный IPv4 блока Сеть на странице виртуальной машины. Если вы создали машину только с внутренним адресом, для доступа через интернет нужно создать новую машину с публичным адресом.

Также можно использовать внутренние IP-адреса и FQDN для установки SSH-соединения между виртуальными машинами внутри одной облачной сети Яндекс.Облака.

В терминале выполните следующую команду:

$ ssh <имя_пользователя>@<публичный_IP-адрес_виртуальной машины>

Важная информация

Команды необходимо выполнять от имени root-пользователя: вводите команду sudo перед каждой командой или выполните команду sudo su, чтобы работать как root-пользователь до окончания сессии терминала.

Если вы подключаетесь к машине в первый раз, может появиться предупреждение о неизвестном хосте:

The authenticity of host '130.193.40.101 (130.193.40.101)' can't be established.
ECDSA key fingerprint is SHA256:PoaSwqxRc8g6iOXtiH7ayGHpSN0MXwUfWHkGgpLELJ8.
Are you sure you want to continue connecting (yes/no)?

Введите в терминале слово yes и нажмите Enter.

В командной строке выполните команду:

$ ssh <имя_пользователя>@<публичный_IP-адрес_виртуальной машины>

Важная информация

Команды необходимо выполнять от имени администратора. Чтобы запустить командную строку от имени администратора, нажмите Поиск в левом нижнем углу экрана и введите Командная строка. Нажмите правой кнопкой мыши и выберите Запуск от имени администратора.

Если вы подключаетесь к машине в первый раз, может появиться предупреждение о неизвестном хосте:

The authenticity of host '130.193.40.101 (130.193.40.101)' can't be established.
ECDSA key fingerprint is SHA256:PoaSwqxRc8g6iOXtiH7ayGHpSN0MXwUfWHkGgpLELJ8.
Are you sure you want to continue connecting (yes/no)?

Введите в командной строке yes и нажмите Enter.

В Windows соединение устанавливается с помощью приложения PuTTY.

  1. Запустите приложение Pageant.
    1. Нажмите правой кнопкой мыши на значок Pageant на панели задач.
    2. В контекстном меню выберите пункт Add key.
    3. Выберите сгенерированный PuTTY приватный ключ в формате .ppk. Если для ключа задан пароль, введите его.
  2. Запустите приложение PuTTY.
    1. В поле Host Name (or IP address) введите публичный IP-адрес виртуальной машины, к которой вы хотите подключиться. Укажите порт 22 и тип соединения SSH.

      ssh_add_ip

    2. Откройте в дереве слева пункт Connection - SSH - Auth.

    3. Установите флаг Allow agent forwarding.

    4. В поле Private key file for authentication выберите файл с приватным ключом.

      ssh_choose_private_key

    5. Вернитесь в меню Sessions. В поле Saved sessions введите любое название для сессии и нажмите кнопку Save. Настройки сессии сохранятся под указанным именем. Вы сможете использовать этот профиль сессии для подключения с помощью Pageant.

      ssh_save_session

    6. Нажмите кнопку Open. Если вы подключаетесь к машине в первый раз, может появиться предупреждение о неизвестном хосте:

      ssh_unknown_host_warning

      Нажмите кнопку Да. Откроется окно терминала с предложением ввести логин пользователя, от имени которого устанавливается соединение. Введите имя пользователя, которое вы указали при создании виртуальной машины и нажмите Enter. Если все настроено верно, будет установлено соединение с сервером.

      ssh_login

Если вы сохранили профиль сессии в PuTTY, в дальнейшем для установки соединения можно использовать Pageant:

  1. Нажмите правой кнопкой мыши на значок pageant на панели задач.
  2. Выберите пункт меню Saved sessions.
  3. В списке сохраненных сессий выберите нужную сессию.

Добавление SSH-ключей для других пользователей

Вы можете добавить SSH-ключи для другого пользователя виртуальной машины. Для этого нужно создать нового пользователя и добавить для него файл с авторизованными ключами.

  1. Зайдите на виртуальную машину под именем пользователя, которого вы указали при создании виртуальной машины в консоли управления. Если виртуальная машина создавалась через CLI, то пользователь по умолчанию yc-user.

    Примечание

    Получить информацию о виртуальной машине вместе с пользовательскими метаданными можно с помощью команды:

    $ yc compute instance get --full <имя-виртуальной-машины>
    
  2. Создайте нового пользователя и укажите для него оболочку bash для использования по умолчанию:

    $ sudo useradd -m -d /home/testuser -s /bin/bash testuser
    
  3. Переключитесь на созданного пользователя:

    $ sudo su - testuser
    
  4. Создайте папку .ssh в домашней директории нового пользователя:

    $ mkdir .ssh
    
  5. Создайте в папке .ssh файл authorized_keys:

    $ touch .ssh/authorized_keys
    
  6. Добавьте в файл authorized_keys публичный ключ нового пользователя:

    $ echo "<публичный_ключ>" > /home/testuser/.ssh/authorized_keys
    
  7. Измените права доступа к файлу authorized_keys и каталогу .ssh:

    $ chmod 700 ~/.ssh
    $ chmod 600 ~/.ssh/authorized_keys
    
  8. Отключитесь от виртуальной машины командой exit.

  9. Перезапустите виртуальную машину.

  10. Проверьте подключение для нового пользователя:

    $ ssh testuser@<публичный-IP-адрес-ВМ>
    

Что дальше