Как вы подключаетесь к удалённой машине в облаке?

Основные способы подключения к удалённой машине в облаке

SSH (для Linux/Unix) — самый распространённый способ. Обычно используется аутентификация по ключу (PEM/PEM + passphrase), команда вида ssh -i ~/.ssh/key.pem user@IP. Для разных образов стандартные имена пользователей: ubuntu, ec2-user, centos, root (не рекомендуется). SSH поддерживает агент (ssh-agent), ProxyJump (для bastion/jump-host), проброс портов и SOCKS-прокси.

RDP (для Windows) — через порт 3389 с помощью клиента Remote Desktop (mstsc, Microsoft Remote Desktop). Часто комбинируют с bastion/VPN или облачными сервисами типа Azure Bastion, чтобы не открывать RDP в публичный интернет.

Web-консоль провайдера — «SSH in browser» / «Connect» в панели провайдера (EC2 Instance Connect, GCP Cloud Console SSH, Azure Cloud Shell). Удобно для быстрого доступа и когда нет настроенных ключей.

Агент-подключения от провайдера — управляемые способы без открытия 22/3389 (например, AWS Systems Manager Session Manager, GCP IAP, Azure Bastion). Позволяют подключаться по IAM-разрешениям, не выставляя портов и не используя публичный IP.

VPN / приватная сеть — подключение к приватному IP внутри VPC/VNet через VPN, Direct Connect или через корпоративную сеть. Часто используется для безопасности: машины не имеют публичных IP.

Bastion / jump host — отдельная машина в DMZ с публичным доступом, через неё заходят в приватные сервера. Настраивают ProxyJump в ~/.ssh/config для удобства.

Файловые протоколы и синхронизация — SCP, SFTP, rsync для копирования файлов; Ansible/Fabric/SSH для автоматизации команд на множестве машин.

Примеры полезных команд

Подключение по ключу:

chmod 600 ~/.ssh/mykey.pem
ssh -i ~/.ssh/mykey.pem ubuntu@203.0.113.12

Через bastion (ProxyJump):

ssh -J bastion-user@bastion.example.com target-user@10.0.2.5

Проброс локального порта к удалённой БД:

ssh -i key.pem -L 5432:127.0.0.1:5432 user@bastion.example.com -N

SOCKS-прокси (динамический):

ssh -D 1080 -i key.pem user@bastion.example.com -N

Копирование файлов:

scp -i key.pem ./file.txt ubuntu@203.0.113.12:/home/ubuntu/
rsync -avz -e "ssh -i ~/.ssh/key.pem" ./localdir ubuntu@203.0.113.12:/home/ubuntu/

Подключение без открытого SSH-порта (пример AWS SSM):

aws ssm start-session --target i-0123456789abcdef0

GCP через IAP:

gcloud compute ssh instance-name --zone zone --tunnel-through-iap

Пример ~/.ssh/config для удобства:

Host bastion
HostName bastion.example.com
User ec2-user
IdentityFile ~/.ssh/bastion.pem
Host private-server
HostName 10.0.2.5
User ubuntu
ProxyJump bastion
IdentityFile ~/.ssh/private.pem

Безопасность, лучшие практики и отладка

Безопасность: отключать аутентификацию по паролю (PasswordAuthentication no), запретить PermitRootLogin, использовать ключи или SSH-сертификаты, ограничивать IP-диапазоны в security groups/NSG, применять IAM/ролей вместо статичных ключей, вести аудит и запись сессий (SSM, Bastion), ротация ключей и минимальные права.

Хардениг bastion: минимальный набор сервисов, логирование, MFA для доступа в консоль, ограничение доступа по IP, использование session-recording при необходимости.

Отладка при проблемах: ssh -vvv для детальной информации; проверка правил облачной сети (security groups, NSG), локального firewall (ufw/iptables), маршрутизации и наличия public IP / floating IP; проверка состояния инстанса в консоли; просмотр системных логов/serial console; временное открытие порта для теста, затем возвращение к безопасным настройкам.

Автоматизация: используйте SSH-агенты, ключи с passphrase, Ansible/Terraform/Cloud SDK для повторяемых подключений и управления. Для корпоративных сценариев — SSH CA (подпись краткоживущих сертификатов) или одноразовые ключи.

Не храните секреты в открытом виде на инстансе; для секретов используйте специализированные менеджеры секретов и instance roles для доступа к ресурсам.