Yandex cloud ssh windows

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

Appearance settings

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

Настоящая инструкция применима к Windows.

  1. Установить OpenSSH.
  2. Запустить cmd.exe , powershell.exe  или bash.exe.
  3. Создать новый ключ с помощью команды ssh-keygen:
ssh-keygen -t ed25519 -C "<опциональный_комментарий>"

Вы можете передать в параметре -C пустую строку, чтобы не добавлять комментарий, или не указывать параметр -C вообще — в таком случае будет добавлен комментарий по умолчанию.

После выполнения команды вам будет предложено указать имя и путь к файлам с ключами, а также ввести пароль (passphrase) для закрытого ключа. Если задать только имя, пара ключей будет создана в текущей директории. Открытый ключ будет сохранен в файле с расширением .pub, закрытый ключ — в файле без расширения.

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

Подключение к ВМ

Для подключения к ВМ в командной строке выполните команду:

ssh -i <путь_к_ключу\имя_файла_ключа> <имя_пользователя>@<публичный_IP-адрес_ВМ>

При первом подключении к ВМ появится предупреждение о неизвестном хосте:

The authenticity of host '89.169.132.223 (89.169.132.223)' can't be established.
ECDSA key fingerprint is SHA256:DfjfFB+in0q0MGi0HnqLNMdHssLfm1yRanB********.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

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


📂 Yandex Cloud

Последнее изменение: 23.09.2024 15:20


Кратко:

  • Доступ к серийной консоли возможен через SSH, консоль управления Yandex Cloud или CLI.
  • Для подключения по SSH необходимо знать идентификатор и имя пользователя.
  • Шаблон команды подключения для Linux: ssh -t -p 9600 -o IdentitiesOnly=yes -i ~/.ssh/<имя закрытого ключа> .<имя пользователя>@serialssh.cloud.yandex.net.
  • Для отключения от серийной консоли нажмите Enter, затем введите ~ (тильда и точка) или используйте Ctrl + D.
  • Вход через консоль управления: используйте логин и пароль, установленные при подключении к ВМ.

Получаем доступ к серийной консоли

Работа серийной консоли зависит от настроек операционной системы. Yandex Compute Cloud обеспечивает канал связи между пользователем и COM-портом ВМ, но не гарантирует стабильность работы консоли со стороны операционной системы ВМ.

Доступ к серийной консоли ВМ с ОС на базе Linux возможен следующими способами:

  • по протоколу SSH с другого компьютера;
  • через консоль управления Yandex Cloud;
  • с помощью интерфейса командной строки Yandex Cloud CLI. Подробнее работу с CLI мы рассмотрим в одной из следующих практических работ.

Вход по протоколу SSH

  1. Подключитесь к ВМ по протоколу SSH. Установите пароль текущему пользователю с помощью утилиты passwd в привилегированном режиме:
sudo passwd <имя_пользователя>

После ввода команды дважды наберите одинаковый пароль.

  1. Для доступа к серийной консоли ВМ необходимо знать её идентификатор (ID). В консоли управления перейдите в раздел Compute Cloud. По умолчанию откроется страница со списком ВМ. В столбце справа указан идентификатор каждой ВМ.

  2. Используйте для входа идентификатор ВМ и имя (логин) созданного в ней пользователя. Вот шаблон команды подключения для Linux:

ssh -t -p 9600 -o IdentitiesOnly=yes -i ~/.ssh/<имя закрытого ключа> <ID виртуальной машины>.<имя пользователя>@serialssh.cloud.yandex.net
  1. Вот так вы подключитесь к консоли, если в ВМ с ID fhm0b28lgfp4tkoa3jl6 есть пользователь yc-user:
ssh -t -p 9600 -o IdentitiesOnly=yes -i ~/.ssh/id_rsa Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.
  1. Введите установленный ранее пароль.
  2. Чтобы отключиться от серийной консоли, нажмите клавишу Enter, а затем введите символы ~. (тильда и точка). В терминалах Linux для отключения также можно использовать комбинацию клавиш Ctrl + D.

Вход через консоль управления

В консоли управления откройте страницу ВМ и через меню слева перейдите на страницу Серийная консоль. При авторизации используйте логин, указанный при создании ВМ, и пароль, который вы установили после подключения к ней.

Категория: Cloud Services Engineer

Просмотров: 295

В чём, собственно, проблема зайти на виртуальную машину в облаке по SSH?

Во-первых чтобы зайти на виртуальную машину по SSH, ни о чём не думая, нужно держать
на ней белый адрес IP, за который, по естественным в наше время причинам,
облачные провайдеры просят отдельных денег. Которые при массовом использовании
становятся заметными.

Во-вторых, если мы плюнули и потратились на внешние адреса для всех виртуалок,
к которым нужен доступ по SSH, мы оказываемся должны ещё плюнуть и потратиться
на организацию и поддержку файрволла для защиты сервисов, установленных на этих
виртуалках.

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

В этом подходе вопросы может вызвать задача сопоставления имени внутренней
машины её адресу IP. Традиционно заводится сервер DNS с поддержкой внутренней
зоны. При разумном количестве статических адресов соответствие можно прописывать
прямо при помощи ssh_config. Как мы суть облачные жители, для определения
адресов воспользуемся API облака.

Предполагаем, что в каждом каталоге уже создана виртуальная машина под
названием bastion-0 и на всех виртуальных машинах облака созданы учётные
записи оператора с ключами ssh.

Заведём профиль для каждого каталога нашего облака и настроим SSH так, чтобы
на виртуальную машину можно было попасть по псевдоадресу
<instance-name>.<profile>.

Для настройки профиля можно запустить yc init и далее идти по диалогам:

> yc init
Welcome! This command will take you through the configuration process.
Pick desired action:
 [1] Re-initialize this profile 'default' with new settings
 [2] Create a new profile
Please enter your numeric choice: 2
Enter profile name. Names start with a lower case letter and contain only lower case letters a-z, digits 0-9, and hyphens '-': prod
Please go to https://oauth.yandex.ru/authorize?response_type=token&client_id=QMbwL7XPUHpyRdEAwr9o2RWVmuc4dyf7 in order to obtain OAuth token.

Please enter OAuth token: zqHooQukL47xAGXL7od68jYnWLGVZOs4q_F0XQ4
You have one cloud available: 'mycloyd' (id = j1rhzWJevebiwI9x40fe). It is going to be used by default.
Please choose folder to use:
 [1] prod (id = zss8DfD5hWRGvmSeZTcq)
 [2] dev (id = guLhrfu4uPfUtQeynPUp)
Please enter your numeric choice: 1
Your current folder has been set to 'prod' (id = zss8DfD5hWRGvmSeZTcq).
Do you want to configure a default Compute zone? [Y/n] n
>

И так для каждого каталога. Если уже известен токен OAuth, возможно, удобнее
будет просто отредактировать файл ~/.config/yandex-cloud/config.yaml:

current: dev
profiles:
  prod:
    token: zqHooQukL47xAGXL7od68jYnWLGVZOs4q_F0XQ4
    cloud-id: j1rhzWJevebiwI9x40fe
    folder-id: zss8DfD5hWRGvmSeZTcq
  dev:
    token: zqHooQukL47xAGXL7od68jYnWLGVZOs4q_F0XQ4
    cloud-id: j1rhzWJevebiwI9x40fe
    folder-id: guLhrfu4uPfUtQeynPUp

Для профилей заведём в ~/.ssh/config записи:

Host *.prod
    ProxyCommand yc_ssh_proxy %h %p bastion-0
Host *.dev
    ProxyCommand yc_ssh_proxy %h %p bastion-0

Основной скрипт yc_ssh_proxy разместим по пути, перечисленному в $PATH
(мне удобно держать в ~/bin/). Для работы скрипта понадобится python. Так
получилось.

#!/bin/sh
#
# Usage: yc_ssh_proxy host.env port bastion
#

HOST=$(echo $1 | cut -d. -f1)
PROFILE=$(echo $1 | cut -d. -f2)

instance() { yc --profile $PROFILE compute instance get $1 --format json; }
prop() { cat | python -c "import json;import sys;print(json.load(sys.stdin)['network_interfaces'][0]['primary_v4_address']$1)"; }

ADDR=$(instance $HOST | prop '["address"]')
BASTION=$(instance $3 | prop '["one_to_one_nat"]["address"]')

exec ssh -W $ADDR:$2 -q $BASTION

Проверим доступность машин облака по ssh:

> yc --profile prod compute instance list
+----------------------+---------------------------+---------------+---------+---------------+-------------+
|          ID          |           NAME            |    ZONE ID    | STATUS  |  EXTERNAL IP  | INTERNAL IP |
+----------------------+---------------------------+---------------+---------+---------------+-------------+
| yisv06r81u30jn925rhp | ut6ikj8lxmgmo4ikmymt-bl7c | ru-central1-a | RUNNING |               | 10.2.0.23   |
| fnyxiigmjy547fmr19l9 | bastion-0                 | ru-central1-a | RUNNING | 152.2.34.233  | 10.4.0.36   |
+----------------------+---------------------------+---------------+---------+---------------+-------------+

> ssh ut6ikj8lxmgmo4ikmymt-bl7c.prod
Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-55-generic x86_64)
 . . .
admin@ut6ikj8lxmgmo4ikmymt-bl7c:~$

Замечу, что при таком подходе статический адрес бастиону не требуется, он будет
запрашиваться по Cloud API. Прерываемой же машину делать не стоит, замучаешься
адреса подтверждать.

p.s.

Недавно снова нашёл потерянный репозиторий с плагином ansible inventory для
облака Яндекс. На радостях добавлю пример настройки inventory для доступа к
нодам кластера Managed Kubernetes.

Пока Яндекс определяется, как распространять плагин, положим его в
~/.ansible/plugins/inventory:

mkdir -p ~/.ansible/plugins/inventory
curl https://raw.githubusercontent.com/st8f/community.general/yc_compute/plugins/inventory/yc_compute.py > ~/.ansible/plugins/inventory/yc_compute.py

Inventory запишем в файл yc_compute.yml:

plugin: community.general.yc_compute
folders:
  - zss8DfD5hWRGvmSeZTcq
filters:
  - labels['managed-kubernetes-cluster-id'] == 'catsv06r81u30jn925rh'
auth_kind: oauth
hostnames:
  - "{{ name }}.prod"
keyed_groups:
  - key: labels['managed-kubernetes-node-group-id']
    prefix: node_group

Вся соль здесь в ключе hostnames. Там каждой машине назначается имя, которое
распознаёт настроенный нами клиент ssh. filters отбирает только машины
заданного кластера (см. yc managed-kubernetes cluster list), а
keyed_groups группирует их по ID групп инстансов. Связь проверим командой

> ansible all -i yc_compute.yml -m ping -o
ut6ikj8lxmgmo4ikmymt-bl7c.prod | SUCCESS => {"changed": false,"ping": "pong"}

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Как увеличить производительность ноутбука на windows 10 asus для игр
  • Не удалось запустить задание на печать windows 10
  • Windows 10 поддержка файловых систем
  • Ch431a драйвер windows 10
  • Как открыть ftp в проводнике windows 10