У меня есть 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
пользователя.