Мне нужно реализовать механизм SSH Passkey для решения fwding удаленного порта, но между тремя хостами (три разные виртуальные машины). Позвольте мне объяснить:
Развертывание:
- Хост 1 - наш клиент с SSH-клиентом и веб-сервером
- Хост 2 имеет наш сервер приложений, который управляет несколькими клиентами.
- Хост 3 имеет SSH-сервер (OpenSSH).
Требование:
Удаленный доступ (запуск) приложения, размещенного на веб-сервере на хосте 1, с сервера приложений на хосте 2. Для этого:
- SSH-туннелирование и fwding удаленного порта должны быть установлены «программно» между хостом 1 и хостом 3.
- Сервер приложений на хосте 2 будет перенаправлять URL-адрес на сервер ssh на хосте 3.
Мы попытались сделать это вручную, и это работает. Однако, чтобы запустить команду ssh remote port fwding для установки ssh-туннеля, нам нужно указать пароль от SSH-клиента на хосте 1. Но так как нам нужно достичь этого программно, нам нужно предоставить механизм паролей ssh, в котором ключи генерируются на Узел 1, а затем открытый ключ добавляется на сервер SSH на узле 3 (с использованием ssh-copy-id), а закрытый ключ остается у клиента на узле 1.
Но даже для запуска ssh-copy-id или копирования ключа ssh на сервер (хост 3) нам необходимо ввести пароль вручную.
Запросы:
- Как этого избежать, чтобы он работал программно без какого-либо ручного вмешательства?
- Можем ли мы предоставить пароль в качестве параметра командной строки для команды ssh tunneling? Я проверил инструмент 'sshpass', но не уверен, что это правильный путь.
- Кроме того, как футуристическое требование, возможно ли сгенерировать открытый и закрытый ключи на хосте 2, а затем каким-то образом отправить закрытый ключ на хост 1 и открытый ключ на хост 3 (либо весь файл ключа, либо строку) ? Будет ли аутентификация работать в этом случае между хостом 1 и хостом 3?