Рубрики
SSH ssh

ssh / jump / forward /proxy

Ссылки с примерами:

https://habr.com/ru/post/435546/
https://habr.com/ru/post/122445/
https://codex.so/ssh-tunnel
https://ualinux.com/ru/stream/nabor-komand-dlya-raboty-s-ssh-na-vse-sluchai-zhizni
https://www.opennet.ru/tips/1691_ssh_tunnel_socks.shtml

ssh -J:

Подключаемся к host2 через host1:
ssh -J host1 host2

Подключаемся к host4 через цепочку хостов:
ssh -J host1,host2,host3 host4

ssh -L forward port:

!!! 8080 - локальный порт
!!! 80 - порт который мы пробрасываем 
!!! serv1 - удаленный сервер на котором слушается  80 порт / можно указать localhost
ssh -L 8080:localhost:80 serv1

ssh -L цепочка подключений:

Описание:
localhost - ПК с которого мы подключаемся 
serv1 - ПК с которого доступен serv2
serv2 - ПК к которому нет доступа с localhost

Что:
Очень хочется подключится по ssh к serv2 с localhost
Но для localhost доступен только serv1

Подготовка:
Открываем две консоли:

Первая консоль:
На ПК  с которого будем подключатся запускаем выполняем
ssh -L 2222:0.0.0.0:2222 serv1
Если команда выполнилась успешно нас подключит к серверу serv1
Выполняем уже на serv1: 
ssh -L 2222:0.0.0.0:2222 serv2
Если команда выполнилась успешно нас подключит к серверу serv2
Выполняем на serv2
!!! localhost имеется введу сам сервер serv2
ssh -L 2222:0.0.0.0:22 localhost
Оставляем окно открытым, пока мы его не закрыли туннель работает

Использование:
Вторая консоль:
ssh localhost -p 2222

Проблемы:
!!! ошибка WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
!!! За чем? защищает нас от атаки (man-in-the-middle attack)
!!! но нам нужно подключится через другой хост
!!! временно игнорируем подпись хоста
vim .ssh/config 
---------------
Host localhost
  StrictHostKeyChecking no
--------------

SSH socks proxy:

0. на рабочей станции:
ssh -D 7777 user@remotehost -f -N

Опции:
-D 7777 - эмуляция SOCKS сервера через порт 7777 
-f  - работа в фоне, после аутентификации
-N - не запускать shell на удаленном хосте
user@remotehost - хост имеющий доступ в интернет

1. Приложению которому требовалось интернет указываем socks5 proxy
google-chrome --proxy-server="socks5://192.168.1.10:7777"

Дополнительно:

ssh -p2222 server9 - подключится по ssh к server9, используя порт 2222

ssh -o GlobalKnownHostsFile=/dev/null -o UserKnownHostsFile=/dev/null user@server - подключится по ssh к server используя учетные данные user, 
                                                                                    игнорируем все предупреждения о  WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 
ssh -o StrictHostKeyChecking=no user@host  - подключится по ssh к server используя учетные данные user, игнорируем все предупреждения IDENTIFICATION HAS CHANGED!                                                                                 

ssh user@host cat file.txt - выполнить (cat file.txt) на удаленной системе host
ssh user@host df -h - выполнить команду df -h на удаленной системе host
ssh user@host sudo reboot -  - выполнить команду sudo reboot на удаленной системе host

curl serv1:8080 - подключится к serv1 на порт 8080, если там веб сервер отобразит страницу
nc localhost 2222 - подключится к localhost на порт 2222

scp -P2222 systemrescue-8.04-amd64.iso user@serv100:  - выполнить копирование файла ystemrescue-8.04-amd64.iso из текущего каталога, используем порт 2222, ПК server100

!!! внимание для rsync использование / может привести к различным последствиям
rsync -avz /home/user/folder serv1:/home/user/folder - синхронизация /home/user/folder в serv1:/home/user/folder
rsync -avz /home/user/folder/ serv1:/home/user/folder/  - синхронизация содержимого лfolder в serv1:/home/user/folder
rsync -avz /home/user/folder serv1:/home/user/folder/ - каталог будет скопирован внутрь и мы получим на удаленном ПК /home/user/folder/folder

Пример проброса порта 80, 443, 544

Пример раз
ssh -p 2154 -L 127.0.0.1:8080:192.168.127.118:80 -L 127.0.0.1:8443:192.168.127.118:443 -L 127.0.0.1:8554:192.168.118.124:554 root@192.168.10.240
root@192.168.10.240 - ПК к которому у нас есть доступ по ssh
-p 2154 - этот порт мы используем для подключения к ПК root@192.168.10.240
127.0.0.1:8080:192.168.127.118:80 - с локального хоста пробрасываем порт 8080 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.118:80
127.0.0.1:8443:192.168.127.118:443 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.118:443
127.0.0.1:8554:192.168.127.118:554 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.118:544


Пример два
ssh -p 2154 -L 127.0.0.1:8080:192.168.127.124:80 -L 127.0.0.1:8443:192.168.127.124:443 -L 127.0.0.1:8554:192.168.127.124:554 root@192.168.10.240
root@192.168.10.240 - ПК к которому у нас есть доступ по ssh
127.0.0.1:8080:192.168.127.124:80 - с локального хоста пробрасываем порт 8080 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.124:80
127.0.0.1:8443:192.168.127.124:443 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.124:443
127.0.0.1:8554:192.168.127.124:554 - с локального хоста пробрасываем порт 8443 на ПК 192.168.10.240 там в свою очередь этот порт пробрасываем на 192.168.127.124:544


Для подключения со своего пк просто используем  браузер
http://localhost:8080
http://localhost:8433