SSH, scp и rsync
Подключение, ключи, ~/.ssh/config, проброс портов, jump-хосты и копирование файлов.
Подключение
Подключиться к серверу
ssh <user>@<host>
Подключиться на нестандартный порт
ssh -p <port> <user>@<host>
Подключиться с конкретным ключом
ssh -i ~/.ssh/<ssh_key> <user>@<host>
Выполнить одну команду на сервере
ssh <user>@<host> 'uptime && df -h'
Отладить проблемы с подключением
ssh -vvv <user>@<host>
Ключи
Сгенерировать ключ
ssh-keygen -t ed25519 -C "<email>"
Скопировать публичный ключ на сервер
ssh-copy-id <user>@<host>
Добавить ключ в агент
ssh-add ~/.ssh/<ssh_key>
Удалить хост из known_hosts
ssh-keygen -R <host>
Нужно, если сервер переустановили и появилось предупреждение «host key changed».
Отпечаток ключа
ssh-keygen -lf ~/.ssh/<ssh_key>.pub
Проброс портов и туннели
Локальный проброс: удалённая БД на localhost:5433
ssh -N -L 5433:localhost:5432 <user>@<host>
-N — без удалённой команды, только туннель.
Проброс до хоста, доступного только с серверапродвинутая
ssh -N -L 5433:<internal_host>:5432 <user>@<host>
Обратный проброс: открыть локальный порт на серверепродвинутая
ssh -N -R 8080:localhost:3000 <user>@<host>
SOCKS-прокси через серверпродвинутая
ssh -N -D 1080 <user>@<host>
Подключение через jump-хост (бастион)продвинутая
ssh -J <user>@<bastion> <user>@<host>
~/.ssh/config
Алиас хоста с ключом и jump-хостомпродвинутая
Host prod HostName <host> User <user> IdentityFile ~/.ssh/<ssh_key> ProxyJump <bastion> # then just: ssh prod
Не рвать соединение при простоепродвинутая
Host *
ServerAliveInterval 60
ServerAliveCountMax 3Копирование файлов
Скопировать файл на сервер
scp <file> <user>@<host>:/tmp/
Скопировать файл с сервера
scp <user>@<host>:<remote_path> .
Синхронизировать каталог на сервер
rsync -avz --progress <path>/ <user>@<host>:<remote_path>/
Слеш в конце источника означает «содержимое каталога», а не сам каталог.
Зеркалировать каталог с удалением лишнего (dry run)продвинутая
rsync -avz --delete --dry-run <path>/ <user>@<host>:<remote_path>/
rsync через нестандартный порт SSHпродвинутая
rsync -avz -e 'ssh -p <port>' <path>/ <user>@<host>:<remote_path>/