Назад | Перейти на главную страницу

установить безопасное соединение через SSH

Я настраиваю серверное приложение, для которого требуется установить безопасное соединение через 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 - это не одно и то же:

  • VPN работает на транспортном уровне (соединение сетей), в то время как туннель SSH работает на уровне приложения (соединение хостов).
  • VPN может быть аппаратной или программной, в то время как туннель ssh всегда является программным.
  • Вы можете запустить ssh внутри VPN.