Я могу подключиться из дома к серверу на работе ( server A
) через SSH-сервер, подключенный к Интернету.
Мне нужно выполнить команду на сервере в другом офисе ( server C
), который недоступен напрямую из server A
.
Однако существует промежуточный сервер ( server B
), к которому server A
можно получить доступ и с которого server C
можно получить доступ.
+------+ +----------+ +----------+ +----------+
| home |---| server A |---| server B |---| server C |
+------+ +----------+ +----------+ +----------+
Я знаю, что могу выполнить команду на удаленном сервере с помощью ssh следующим образом:
ssh hostname command
Поэтому я попытался объединить несколько команд ssh вместе.
ssh server_A ssh server_B ssh server_C command
Однако я получаю сообщение об ошибке:
ssh: Could not resolve hostname server_B: Name or service not known
Похоже, это говорит о том, что поиск DNS происходит локально, а не на удаленном сервере.
Примечание:
Я попробовал объединить несколько команд SSH, используя хосты, которые может разрешить мой локальный DNS-сервер, и это сработало, что говорит о том, что если я смогу решить свою проблему с поиском DNS, то смогу добиться желаемого.
Вопрос:
Как можно объединить несколько команд ssh, но при этом принудительно выполнить поиск имени только на том удаленном сервере, на котором должна быть запущена следующая команда?
решение1
Насколько я могу судить, разрешение имен осуществляется на удаленном устройстве:
- настроить мой локальный сервер
/etc/hosts
, чтобы дать имя моему серверу в облаке ping server
пингует сервер, чтобы работало локальное разрешение DNSssh server ping server
говоритping: unknown host server
ssh server ssh server
говоритssh: Could not resolve hostname server: Name or service not known
Итак, разрешение имен команд в строках не выполняется локально. Если вы не можете получить адрес, то это потому, что сам удаленный хост не может разрешить имя. Чтобы убедиться, запустите SSH-запрос на serverA и посмотрите, может ли он разрешить serverB ( ping
или что-то еще).