Перейти к содержимому
RunStack
Вики· Обновлено 19 окт. 2026 г.

Шпаргалка: SSH

SSH: ключи, ~/.ssh/config, jump-хост, туннели, scp и rsync, защита сервера.

Ключи

ssh-keygen -t ed25519 -C "me@laptop"       # создать (на своём компьютере)
ssh-copy-id user@server                    # добавить на сервер
ssh-copy-id -i ~/.ssh/id_ed25519.pub -p 2222 user@server
cat ~/.ssh/id_ed25519.pub                  # публичная часть — её можно отдавать
ssh-keygen -lf ~/.ssh/id_ed25519.pub       # отпечаток
ssh-keygen -p -f ~/.ssh/id_ed25519         # сменить пароль ключа
eval "$(ssh-agent)" && ssh-add             # не вводить пароль ключа каждый раз

Без ssh-copy-id (на сервере):

mkdir -p ~/.ssh && chmod 700 ~/.ssh
echo "ssh-ed25519 AAAA… me@laptop" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

~/.ssh/config

Host web
    HostName 203.0.113.10
    User deploy
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

Host db
    HostName 10.0.0.5
    User deploy
    ProxyJump web                          # через web

Host *
    ServerAliveInterval 30

Дальше просто ssh web, scp file web:, ssh db.

Подключение и выполнение команд

ssh -p 2222 user@server
ssh -J user@bastion user@10.0.0.5          # через промежуточный хост
ssh web 'df -h; uptime'                    # команда без входа
ssh -v web                                 # почему не пускает
ssh-keygen -R 203.0.113.10                 # забыть старый ключ хоста (после переустановки)

Файлы

scp file.tar.gz web:/tmp/
scp web:/var/log/app.log .
scp -r ./dist web:/var/www/app
rsync -avz --progress ./dist/ web:/var/www/app/
rsync -avz --delete ./dist/ web:/var/www/app/   # точная копия (лишнее удалит)
rsync -avz -e "ssh -p 2222" ./data/ user@server:/data/

Туннели

ssh -L 5432:127.0.0.1:5432 web             # база сервера на localhost:5432 у вас
ssh -L 8080:10.0.0.5:80 web                # сайт из внутренней сети
ssh -R 9000:127.0.0.1:3000 web             # ваш localhost:3000 на сервере:9000
ssh -D 1080 web                            # SOCKS-прокси через сервер
ssh -fN -L 5432:127.0.0.1:5432 web         # в фоне, без терминала

Сервер

sshd -t                                    # проверить конфиг
sshd -T | grep -E 'port|passwordauth|permitroot'   # что действует
systemctl reload ssh
journalctl -u ssh --since today | grep -E 'Failed|Accepted'
lastb | head                               # неудачные входы

/etc/ssh/sshd_config.d/10-local.conf:

PasswordAuthentication no
PermitRootLogin prohibit-password
MaxAuthTries 3

Перед PasswordAuthentication no проверьте вход по ключу из второго окна. Всё это с автооткатом делает rs harden.