Я настраиваю серверное приложение, которое требует установления безопасного соединения через SSH2, например клиент должен открыть SSH2-соединение с сервером, чтобы получить доступ к определенному приложению:
% ssh -s -p5000 my.server.com app
Я хочу понять, что именно происходит после выполнения этой команды? Как клиент / сервер узнают, что им нужно работать по безопасному каналу SSH? Это называется ssh-туннелированием или у него другое название?
Спасибо.
% ssh -s -p5000 my.server.com app
подключается к my.server.com, затем запускает подсистему "app" в my.server.com
Откуда клиент/сервер знает, что он должен работать по SSH защищенному каналу?
SSH защищенный канал немного запутан: SSH уже безопасен. Безопасный канал может быть VPN.
Обратите внимание, что SSH туннелирование и VPN не одно и то же:
Вы подключаетесь к tcp my.server.com:5000
, там запускается подсистема ssh "app". То, что выполняется, определяется этой подсистемой (в конфигурационном файле сервера ssh). Эти подсистемы могут передавать данные туда и обратно, через stdin и stdout. Внешний противник видит соединение по протоколу tcp, видит, что это сессия ssh и ничего больше. Это не называется "ssh туннелированием".
Туннелирование - это когда вы пересылаете какой-то TCP сокет, как этот: ssh firewall -L 12345:system-behind:54321
, затем локально соединяетесь с localhost:12345
и работает так, как будто Вы сидите на брандмауэре и подключаетесь к системе - позади:54321
оттуда. Вы "туннелируете" tcp-соединение через ssh. Добавив -g, Вы можете позволить кому угодно в Вашей сети соединиться с you:12345
и быть как будто бы соединены с system-behind:54321
от брандмауэра.
Например, рассмотрим Linux firewall, делающий NAT и с ssh сервером, и некоторые windows серверы позади него, которые имеют брандмауэр, который разрешает соединения только из локальной сети. Вы можете подключиться к нему вот так: ssh firewall -L 13389:windows-server address:3389
и затем xfreerdp /v:localhost:13389
; сервер будет видеть соединение с локального адреса брандмауэра, а не с Вашего интернет-адреса.
Вы можете сделать это в обратном порядке с помощью ssh remote -R 12345:system-near-you:54321
. Затем вы открываете сокет на удаленном компьютере, и кто-то, сидящий на удаленном компьютере, может подключиться к localhost:12345
и закончить так, как будто он сидит на вашей машине и подключается к system-near-you:54321
. Это обратное туннелирование. Опять же, -g позволяет это не только тем, кто сидит непосредственно на удаленном компьютере, но и всем, кто может подключиться к remote:12345
.
Также существует ssh ip туннелирование, когда вы создаете виртуальные туннельные интерфейсы, как на сервере, так и на клиенте, присваиваете туда ip адреса и соединяете их с помощью ssh. Это называется VPN, но делать это с машиной ssh не очень удобно, и я никогда не видел, чтобы это использовалось.
.