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

ssh соединение с сервера через другой сервер (A-> B-> C)

У меня есть 3 сервера, назовем их A, B и C

Сервер C находится за брандмауэром, и только сервер B может подключиться к нему. Серверы B и C находятся под моим контролем.

Теперь я хочу, чтобы сервер A подключался к серверу C через сервер B: A -> B -> C

Проблема в том, что я не могу изменить команду на сервере A, который, вероятно, является простым пользователем ssh @ B.

Я пытаюсь перенаправить входящее соединение, используя параметр команды в authorized_keys:

command="ssh user@C" ssh-rsa KEY

Всякий раз, когда A устанавливает соединение с B, я вижу, что соединение установлено с C, но A, похоже, не осознает этого и истекает время ожидания.

Я пытался добавить параметры -t, -t -t, -T или -N в команду ssh, но безуспешно. Есть ли способ предвосхитить соединение ssh таким образом, чтобы сервер A думал, что он общается с сервером B.

Соединение между B и C необходимо запускать, когда A устанавливает соединение с B, и закрывать, когда A закрывает соединение.

Вся аутентификация выполняется с использованием ключей.

[редактировать]

Чтобы уточнить: я не могу управлять командой на сервере A, но, как сейчас, A подключается к B, и затем B открывает соединение с C. Проблема здесь в том, что A не распознает это новое соединение. Я думаю, он не получает подсказку или что-то в этом роде, чтобы А знал, что есть соединение.

Если я использую эту настройку вручную с

ssh user@B

он работает, и я напрямую вошел в систему на C.

В домашнем каталоге пользователя на сервере B вы должны добавить последнюю строку в файл ~/.login (или создайте его, если его не существует), чтобы запустить второй ssh userc@hostC.

Пожалуйста, не используйте ~/.bashrc: в то время как первый используется после входа в систему, второй используется для каждого выполнения bash, даже в сценариях, начинающихся с #!/bin/bash.

То, что вы ищете, - это туннель SSH.

ssh -f user@B -L 2000:C:22

Это подключается к серверу B, напрямую переходит в фоновый режим с -f а затем открывает порт 2000 на локальном хосте с помощью L. Все, что отправляется на этот порт на localhost, перенаправляется на порт 22 на C. Итак, как только вы введете эту команду, вы можете сделать

ssh localhost -p 2000

Что свяжет вас с C.

Обновить

Кажется, я вас неправильно понял, извините. Если вы не можете изменить команду на A, вы все равно можете указать, что должно произойти при входе в систему, изменив ~/.bashrc пользователя.