Настройка SSH туннеля без доступа к SHELL и без VPN
Исходные данные:
Имеем ПК в собственной ЛВС ip_pc1 за натом, , сервер в DMZ (ip_server), ПК клиента ip_other тоже за натом.
Собственная ЛВС закрыта фаерволом, доступ можно получить только изнутри до сервера ip_server
Цель:
Получить доступ по SSH с ip_pc1
до ip_other
Процесс настройки:
На сервере ip_server создаем нового пользователя:
useradd -m -s /bin/false -g nogroup -G nogroup user
-m - Create the user's home directory if it does not exist
-s - The name of the user's login shell.
-g - The group name or number of the user's initial login group.
-G - A list of supplementary groups which the user is also a member of.
Задаем новому пользователю пароль:
Логинимся под пользователем, генерируем пару ключей
Создаем файл ~/.ssh/authorized_keys и добавляем в него следующие строки:
command="read a; exit",no-agent-forwarding,no-X11-forwarding,no-user-rc ssh-rsa <<здесь вставляем только что созданный публичный ключ>>
где: command="read a; exit"
- позволяет при поднятии соединения закрыть доступ к shell. При нажатии любой клавиши будет выполнен exit. no-agent-forwarding,no-X11-forwarding,no-user-rc
- запрещаем любые другие возможности пользователя
Закрытый ключ передаем клиенту
Клиент на своей машине подключается к нашему серверу:
sh -R 4897:localhost:22 user@server
где:
22 - порт ssh который слушает машина клиента
4897 - порт перенаправления на наш сервер, можно выбрать любой другой
На собственном пк подключаемся к серверу:
ssh -L 2222:localhost:4897 user@server
где:
2222 - порт куда мы будем коннектится по SSH
4897 - порт должен совпадать с портом перенаправления на наш сервер из прошлого шага (с него забираем туннель)
Теперь на нашем пк открываем новый терминал и можем войти на ПК клиента:
ssh -o "StrictHostKeyChecking=no" -p 2222 -i id_rsa_client another_user@localhost
Где: -o "StrictHostKeyChecking=no"
- отключает проверку публичного ключа тачки, куда мы подключаемся, т.к. это всегда будет localhost -p 2222
принудительно указываем порт для подключения -i id_rsa_client
путь до закрытого ключа для подключения к клиенту (может отсутствовать при авторизации по паролю) another_user@localhost
- пользователь another_user
должен существовать на ПК ip_other, адрес сервера localhost, т.к. подключаемся через открытый порт на своей машине.
Готово!
Посмотреть активные туннели можно командой:
sudo lsof -i -n | egrep '\<ssh\>'