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

Обычно процесс входа в систему по ssh выглядит следующим образом.

  1. Мой ноутбук-> MiddleMan:

mylaptop: ssh myUser@ServerA (аутентификация пароля)

  1. MiddleMan-> Пункт назначения:

ServerA: sudo -u sharedUser ssh ServerB (без пароля)

Сначала я должен войти на сервер A, используя ограниченную учетную запись myUser , переключить myUser на sharedUser на сервере A, поскольку ключ для сервера B есть только у sharedUser. У меня нет ключа для сервера B, и у меня нет привилегии С помощью myUser на сервере A.

Я попробовал один OpenSSH/Cookbook/Proxies и Jump Hosts, но он не будет работать, потому что myUser для сервера A не имеет ключа (он есть у sharedUser на сервере A) для входа на сервер B.

      ssh                 sudo su                   ssh
Me -----------> myUser@A ---------> sharedUser@A -----------> B
       ^                     ^                        ^
   password              switch user        using sharedUser@A's
authentication                                     ssh key

Вопросы:

  1. Я хотел бы знать, есть ли способ подключиться к серверу B "напрямую" через SSH Proxy или что-то еще?

  2. Есть ли способ для удаленного обмена файлами с сервером B с использованием SFTP/SCP и т.д. С тщательной перестройкой сервера и изменением имени пользователя?

Спасибо!

1 ответ1

0

От mylaptop вы можете запустить команду на ServerA так: ssh myUser@ServerA some_command Так что это должно быть возможно:

ssh -t myUser@ServerA sudo -u sharedUser ssh ServerB

Обычно ssh который должен запускать some_command , не выделяет псевдо-терминал, он только передает stdin, stdout, stderr. Если вы хотите взаимодействовать так, как если бы ssh ServerB был набран вручную на ServerA , необходим псевдо-терминал. Поэтому -t .

Псевдо-терминал также будет полезен, если sudo или "внутренний" ssh пароль.

Вы сказали, что хотите передать файлы. "Внутренний" ssh может запустить команду на ServerB как "внешний" ssh запускает команду на ServerA . Командой может быть cat , файл может быть передан (передан) таким образом. В этом случае вы не должны использовать -t , он будет искажать только поток. К счастью, ваш sudo -u sharedUser ssh ServerB нуждается в пароле, поэтому нет никакого конфликта в том, использовать -t или нет.

Чтобы извлечь файл с ServerB:

>/local/file ssh myUser@ServerA sudo -u sharedUser 'ssh ServerB "cat </server/b/path/to/file"'

Чтобы отправить файл на ServerB:

</local/file ssh myUser@ServerA sudo -u sharedUser 'ssh ServerB "cat >/server/b/path/to/file"'

Правильное цитирование очень важно, чтобы перенаправление сразу после cat влияло на cat (не на ssh или sudo).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .