Server configuration is in /etc/ssh/sshd_config
Client configuration is in /etc/ssh/ssh_config
ssh-keygen #Генеруємо SSH ключ. По дефолту кладеться в ~/.ssh/
Добавляємо свій ключ на віддалений сервер, при умові що ми маємо доступ до відаленого сервера по SSH:
ssh-copy-id -i ~/.ssh/mykey.pub user@server
Якщо немає доступу до сервера по SSH, то копіюємо вміст публічного ключа або пересилаємо вміст поштою та добавляємо в файл на сервері:
~/.ssh/authorized_keys
ssh user@server -i ~/.ssh/mykey # Зєднання якщо вказаний ключ – встановлюється швидше
ssh -p2222 user@server # Явно вказуємо по якому порту підключатися
ssh -oPort=2222 user@server # Альтернативний варіант, який може використовуватись в конфігураційному файлі ~/.ssh/config
Конфігурація рівня користувача зберігається в файлі:
~/.ssh/config
Конфігурація рівня системи:
/etc/ssh/sshd_config та /etc/ssh/ssh_config
~/.ssh/config
Host 192.168.1.1
User Fox # при підключенні до хоста 192.168.1.1 буде використовуватись логін Fox
Host 192.168.1.*
User Fox # при підключенні до мережі192.168.1.0 буде використовуватись логін Fox
Host *.com
User Fox # при підключенні до хостів в домені .com буде використовуватись логін Fox
Host stage1
Hostname work.stage01.eu.central.example.host.com
User Fox # Створює аліас, щоб не вводити довгу назву сервера. Тепер можна використовувати ssh stage1 замість ssh work.stage01.eu.central.example.host.com
Більш повний файл конфігурації:
Host server
Hostname 192.168.1.1
Port 22
User Fox
IdentityFile ~/.ssh/fox_key
chmod 600 ~/.ssh/config # змінюємо права для файла конфігурації
ssh -J user@server1 user@server2 # Якщо сервер один використовується як бастіон хост, то з командою -J переходимо одразу на потрібний сервер
ssh -J user@server1,user@server2 user@server3 # Перескакуємо через 2 проміжних сервера. Проміжні сервери розділяємо комою.
Host server
Hostname 192.168.1.1
Port 22
User Fox
IdentityFile ~/.ssh/fox_key
Host server2
Hostname 10.10.1.2
ProxyJump Fox@172.31.23.22 #Приклад як прописати проміжний хост(бастіон хост) в файлі конфігурації
Переадресація портів:
Local Port Forwarding
Відкриває доступ до віддаленого порта 80 через локальний 8080
<PC>:8080 —-> <server1>:80
ssh -L 8080:localhost:80 fox@server1
<PC>:8080—-> <server1>—-> <server2>:80
ssh -L 8080:server2:80 fox@server1
При запуску команди, відкриється звичайне ssh зєднання, але в той же час прокинеться порт. І тепер, наприклад веб сторінка сервера буде доступна на локальній машині за посиланням localhost:8080
В config:
LocalForward 8080:localhost:80
Remote Port Forwarding
Відкриває доступ до локального порта 22 через віддалений 5432
<PC>:22 <—- <server1>:5432
ssh -R 5432:localhost:22 fox@server1
В config:
RemoteForward 22:localhost:5432
Dynamic Port Forwarding
Запускає SOCKS proxy на локальному порті 3000
<PC>:3000 —-> Server1 ——> Server2
|__________> Server3
ssh -D 3000 user@server1 # Для прикладу – встановити зєдннання та в браузері локальної машини в налаштуваннях встановити в налаштуваннях Proxy -> SOCKS host : localhost , Port: 3000. Тепер весь трафік Інтернет буде йти через Server1
################################
-f Fork the SSH process int o the background
-n Don’t read from STDIN
-N Don’t run remote commands
-T Don’t allocate a TTY
##################################
ssh -fnNT -D 3000 user@server1 # Запускає “тунель” і ховається в бекграунд. Виловити можна за допомогою команди: ps x | grep ssh
В config:
DynamicForward 3000
Інтегровані програми які використовують SSH
sftp
sftp server@192.168.1.10
sftp>put file1
sftp>bye
scp
scp file1 fox@192.168.1.15:/tmp/
scp fox@192.168.1.15:/tmp/file1 file2
Troubleshooting:
systemctl status sshd
systemctl restart sshd
journalctl -u ssh
sudo ufw status