1️⃣ Подключение по SSH
ssh user@host
ssh -p 2222 user@host # Подключение к нестандартному порту
ssh -i ~/.ssh/id_rsa user@host # Подключение с указанием ключа
2️⃣ Генерация SSH-ключей
ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # Генерация RSA-ключа
ssh-keygen -t ed25519 -C "your_email@example.com" # Генерация Ed25519-ключа (рекомендуется)
- Открытый ключ
id_rsa.pub добавляется на сервер (~/.ssh/authorized_keys). - Закрытый ключ
id_rsa хранится локально. 3️⃣ Добавление ключа в агент SSH
eval "$(ssh-agent -s)" # Запуск агента
ssh-add ~/.ssh/id_rsa # Добавление ключа в агент
4️⃣ Копирование ключа на сервер
ssh-copy-id user@host
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
5️⃣ Конфигурация SSH-клиента (
~/.ssh/config) Файл
~/.ssh/config позволяет задать настройки подключения: Host myserver
HostName example.com
User myuser
Port 2222
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
Подключение теперь выполняется просто командой:
ssh myserver
📡 Проброс портов (Port Forwarding)
🔄 Локальный порт-форвардинг (L)
Перенаправляет локальный порт (
-L local_port:remote_host:remote_port): ssh -L 8080:127.0.0.1:80 user@host
- Теперь локальный
localhost:8080 перенаправляется на host:80.🔄 Удаленный порт-форвардинг (R)
Перенаправляет порт сервера на локальный компьютер (
-R remote_port:local_host:local_port): ssh -R 9000:localhost:22 user@host
- Теперь подключение к
host:9000 попадёт на localhost:22.🔄 Динамический порт-форвардинг (SOCKS-прокси)
ssh -D 1080 user@host
- Теперь можно использовать
localhost:1080 как SOCKS-прокси.🔀 Обход брандмауэров (Reverse SSH-туннель)
Если сервер за NAT или firewall, создаем обратное подключение:
ssh -R 2222:localhost:22 user@public-server
ssh -p 2222 localhost # Теперь можно подключаться с public-server обратно
📑 Полезные команды
🔍 Просмотр информации о сервере:
ssh user@host 'uname -a && uptime'
📡 Подключение без выполнения команд (для туннелей):
ssh -N -D 1080 user@host
⏳ Подключение с поддержкой восстановления соединения:
autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -N -D 1080 user@host
🔒 Ограничение команд пользователя в
authorized_keys: command="/path/to/script.sh",no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAB3...
🔥 Дополнительные параметры SSH
🔹 Выключение строгой проверки хоста:
ssh -o StrictHostKeyChecking=no user@host
🔹 Использование прокси:
ssh -o ProxyCommand="nc -X 5 -x proxyhost:1080 %h %p" user@host
🔹 Перезапуск службы SSH:
sudo systemctl restart sshd # Для systemd
sudo service ssh restart # Для SysVinit
🔹 Проверка лога SSH:
sudo journalctl -u sshd --no-pager | tail -n 20 # Для systemd
sudo tail -f /var/log/auth.log # Для Debian/Ubuntu
sudo tail -f /var/log/secure # Для CentOS
@sysadmin1