До тексту
  1. Статті/

Шпаргалка по SSH

·3 хвилини
cat /etc/passwd
Автор
cat /etc/passwd
Технічний блог про Linux, DevOps та Open Source технології.
Зміст

Генерація ключів
#

Це те за чим я сюди прийшов Ed25519:

1
ssh-keygen -t ed25519 -C "admin@linuxway.com.ua"

Якщо потрібна сумісність зі старими системами (RSA):

1
ssh-keygen -t rsa -b 4096 -C "your@email.com"

Згенерувати ключ в конкретну теку

1
ssh-keygen -t ed25519 -f ~/.ssh/назва_ключа -C "коментар"

Згенерувати ключ без пароля (в скриптах якщо автоматизація)

1
ssh-keygen -t ed25519 -f ~/.ssh/мій_ключ -N ""

Змінити пароль до існуючого ключа

1
ssh-keygen -p -f ~/.ssh/my_key

Копіювання ключа на сервер
#

Автоматично (найпростіше)

1
ssh-copy-id user@host

Конкретний ключ (конкретний .PUB ключ)

1
ssh-copy-id -i ~/.ssh/мій_ключ.pub user@host

Якщо порт нестандартний

1
ssh-copy-id -p 2222 user@host

Вручну (якщо ssh-copy-id немає) - але це дічь.

1
cat ~/.ssh/my_key.pub | ssh user@host "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

Як підключититися
#

1
ssh user@host

Якщо порт нестандартний

1
ssh -p 2222 user@host

З конкретним ключем

1
ssh -i ~/.ssh/my_key user@host

Verbose (дебаг підключення)

1
2
3
ssh -v user@host        # рівень 1
ssh -vv user@host       # рівень 2
ssh -vvv user@host      # рівень 3 (максимум)

Як щось скопіювати
#

Файл НА сервер

1
scp file.txt user@host:/path/

Файл З сервера

1
scp user@host:/path/file.txt ./

Теку рекурсивно

1
scp -r ./folder user@host:/path/

З вказанням порту

1
scp -P 2222 file.txt user@host:/path/

З конкретним ключем

1
scp -i ~/.ssh/my_key file.txt user@host:/path/

Тунелі та проксі
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
# Local port forwarding (локальний порт → віддалений сервіс)
ssh -L 8080:localhost:80 user@host
# тепер localhost:8080 → host:80

# Local forwarding до третього хоста
ssh -L 3306:db-server:3306 user@jump-host
# тепер localhost:3306 → db-server:3306 через jump-host

# Remote port forwarding (віддалений порт → локальний сервіс)
ssh -R 9090:localhost:3000 user@host
# тепер host:9090 → твій localhost:3000

# Dynamic SOCKS proxy
ssh -D 1080 user@host
# SOCKS5 проксі на localhost:1080

# Jump host (ProxyJump)
ssh -J user@jump user@target

# Тримати тунель у фоні
ssh -fN -L 8080:localhost:80 user@host

SSH Config (.ssh/config)
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# Базовий хост
Host myserver
    HostName 192.168.1.100
    User admin
    Port 22
    IdentityFile ~/.ssh/my_key

# Через jump host
Host internal
    HostName 10.0.0.5
    User admin
    ProxyJump jump-host

# Wildcard для групи серверів
Host 192.168.1.*
    User admin
    IdentityFile ~/.ssh/home_key

# Загальні налаштування для всіх
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    AddKeysToAgent yes
    IdentitiesOnly yes

Права доступу на файли і теки .ssh
#

1
2
3
4
5
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519         # приватний ключ
chmod 644 ~/.ssh/id_ed25519.pub     # публічний ключ
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/authorized_keys

Налаштування sshd на стороні сервера (/etc/ssh/sshd_config)
#

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14

# Основні налаштування безпеки
Port 2222                          # змінити порт
PermitRootLogin no                 # заборонити root
PasswordAuthentication no          # тільки ключі
PubkeyAuthentication yes
MaxAuthTries 3
AllowUsers admin deploy            # дозволити тільки цих юзерів

# Перезапустити після змін
sudo systemctl restart sshd

# Перевірити конфіг перед рестартом
sudo sshd -t

Related