Справочник: SSH команды

Подключение

ssh user@host                      # стандартное
ssh -p 2222 user@host              # нестандартный порт
ssh -i ~/.ssh/mykey user@host      # конкретный ключ
ssh -v user@host                   # verbose (отладка)
ssh -vvv user@host                 # максимальный verbose

Ключи

ssh-keygen -t ed25519 -C "email"   # генерация Ed25519 (рекомендуется)
ssh-keygen -t rsa -b 4096 -C "email" # генерация RSA
ssh-copy-id user@host              # копировать ключ на сервер
ssh-copy-id -p 2222 user@host     # нестандартный порт
ssh-keygen -R host                 # удалить host из known_hosts
ssh-keygen -l -f key.pub           # fingerprint ключа

Agent

eval "$(ssh-agent -s)"             # запустить agent
ssh-add ~/.ssh/id_ed25519          # добавить ключ
ssh-add -l                         # список загруженных
ssh-add -D                         # удалить все из agent

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

# SCP
scp file.txt user@host:/path/     # на сервер
scp user@host:/path/file.txt .    # с сервера
scp -r dir/ user@host:/path/      # директорию
scp -P 2222 file user@host:/path/ # нестандартный порт
 
# rsync (эффективнее)
rsync -avz dir/ user@host:/path/  # синхронизация
rsync -avz --delete src/ dest/    # с удалением лишнего
rsync -avz -e "ssh -p 2222" dir/ user@host:/path/

Туннели

# Local forward (доступ к удалённому)
ssh -L 8080:localhost:80 user@host
ssh -L 5432:db-server:5432 user@bastion
 
# Remote forward (опубликовать локальное)
ssh -R 8080:localhost:3000 user@host
 
# SOCKS proxy
ssh -D 1080 user@host
 
# В фоне (без интерактивной сессии)
ssh -fNL 5432:localhost:5432 user@host

Удалённое выполнение

ssh user@host "command"            # одна команда
ssh user@host "cd /app && git pull" # несколько
ssh user@host < script.sh         # выполнить локальный скрипт
ssh -t user@host "sudo command"   # с TTY (для sudo/vim)

Права доступа

ФайлПраваОписание
~/.ssh/700Директория SSH
~/.ssh/id_ed25519600Приватный ключ
~/.ssh/id_ed25519.pub644Публичный ключ
~/.ssh/config600Конфигурация клиента
~/.ssh/authorized_keys600Публичные ключи (сервер)
~/.ssh/known_hosts644Fingerprints серверов

sshd (сервер)

sudo sshd -t                      # проверить синтаксис конфига
sudo systemctl restart sshd       # перезапустить
sudo systemctl status sshd        # статус
journalctl -u sshd -f             # логи в реальном времени