Я настраиваю серверное приложение, для которого требуется установить безопасное соединение через SSH2, например клиент должен открыть SSH2-соединение с сервером, чтобы получить доступ к определенному приложению:
% ssh -s -p5000 my.server.com app
Я хочу понять, что именно происходит после выполнения этой команды? Как клиент / сервер узнают, что им нужно работать по безопасному каналу SSH? Это называется ssh-туннелированием или у него другое название?
Спасибо.
Вы подключаетесь к tcp my.server.com:5000
, он запускает там подсистему ssh "приложение". То, что выполняется, определяется этой подсистемой (в файле конфигурации ssh-сервера). Эти подсистемы могут передавать данные туда и обратно через stdin и stdout. Внешний злоумышленник видит tcp-соединение, видит, что это сеанс ssh, и ничего более. Это не называется «туннелирование ssh».
Туннелирование - это когда вы пересылаете какой-то TCP-сокет следующим образом: ssh firewall -L 12345:system-behind:54321
, а затем локально подключиться к localhost:12345
и он работает так, как будто вы сидите на брандмауэре и подключаетесь к system-behind:54321
оттуда. Вы "туннелируете" TCP-соединение через ssh. Добавив -g вы можете разрешить любому в вашей сети подключаться к you:12345
и будь как будто связан с system-behind:54321
из брандмауэра.
Например, рассмотрим брандмауэр Linux, выполняющий 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 не очень удобно, и я никогда не видел этого в использовании.
% ssh -s -p5000 my.server.com app
подключается к my.server.com, затем запускает подсистему "app" в my.server.com
Как клиент / сервер узнают, что им нужно работать по безопасному каналу SSH?
Безопасный канал SSH немного сбивает с толку: SSH уже безопасен. Безопасным каналом может быть VPN.
Обратите внимание, что туннелирование SSH и VPN - это не одно и то же: