Как передать пароль при использовании Jump Server?

Вопрос или проблема

У меня есть Jump Server и Target Server, к которым я хотел бы подключиться так:

myPc > JumpServer > TargetServer

На первом этапе я могу выполнить ssh-keygen, чтобы избежать аутентификации по паролю, однако на шаге 2, из-за соображений безопасности, ssh-keygen не был установлен, и я ничего не могу с этим поделать. Поэтому я подумал о том, чтобы передать пароль в одной команде на моем ПК. Вот что я пробовал до сих пор:

sshpass -p myPassword ssh -At username@JumpServer ssh -A username@targetServer

ssh -J username@JumpServer username@targetServer

Но ни один из вариантов не работает, есть какие-нибудь советы?

Сначала решите, хотите ли вы соединять ssh в цепочку или хотите “вложенные трубки”, которые дает ssh -J. Прочитайте мой ответ, чтобы понять, что я имею в виду. Вы пробовали оба варианта, и неясно, что именно вам нужно. В целом ssh -J лучше (например, переадресация портов или выделение tty проще, чем в случае цепочки).

  • Если вы хотите ssh -J (я рекомендую это), то важны только ключи, доступные вашему локальному ssh. Никакой SSH-клиент не будет вызван на промежуточном хосте. Ваши приватные ключи (если есть) на промежуточном хосте не будут иметь значения, поэтому тот факт, что вы не можете запустить ssh-keygen для их создания, не важен; они все равно не пригодятся. Ваша локальная идентичность может быть использована для аутентификации на промежуточном хосте и на целевом сервере. Я предполагаю, что вы запустили ssh-keygen локально. Сначала зарегистрируйте ваш ключ на промежуточном хосте, выполнив следующую команду локально:

    ssh-copy-id username@JumpServer
    

    Затем используйте промежуточный хост для подключения к целевому серверу и зарегистрируйте ваш ключ там. Выполните это локально:

    ssh-copy-id -o ProxyJump=username@JumpServer username@targetServer
    

    Обратите внимание, что ssh -J … является сокращением для указания ssh -o ProxyJump=…, но поскольку ssh-copy-id не поддерживает -J, мы должны были использовать другую синтаксис здесь.

    Теперь, если оба сервера настроены на разрешение аутентификации на основе ключей, вы сможете выполнить ssh -J username@JumpServer username@targetServer с вашего локального компьютера.

  • Если вы хотите соединять ssh в цепочку, то разумно иметь приватный ключ на промежуточном хосте и использовать его для аутентификации при подключении к целевому серверу. Я понимаю, что вы не можете запустить ssh-keygen на промежуточном хосте. Вы все равно можете создать ключ локально, зарегистрировать его на целевом сервере и переместить (или скопировать) пару ключей на промежуточный хост, так что файлы будут там так, как будто вы создали их там с ssh-keygen.

В общем, каждый SSH-сервер может быть настроен так, чтобы запрещать определенные действия, и это может ограничить ваши возможности или наложить определенные действия. Например, если вам удалось заставить промежуточный хост принять ваш ключ, но целевой сервер запрашивает пароль, несмотря ни на что, то эта локальная команда будет полезной:

sshpass -p'myPassword' ssh -J username@JumpServer username@TargetServer

(Эта идея уже была опубликована в комментарии.)

Примечания:

.

Ответ или решение

Как передавать пароль при подключении через Jump Server

Подключение к удаленному серверу через Jump Server (или промежуточный сервер) может быть сложной задачей, особенно если на вашем Jump Server не установлены необходимые инструменты, такие как ssh-keygen. Если вы хотите обойтись без установки ssh-keygen и использовать пароль для аутентификации, я предложу несколько вариантов решения этой задачи.

1. Использование ssh -J

Рекомендую использовать синтаксис ssh -J, который значительно упрощает процесс подключения через Jump Server. Это обеспечивает более чистый и понятный способ подключения, позволяющий избежать создания дополнительных соединений.

  1. Убедитесь, что на вашем локальном компьютере установлен SSH-ключ. Если у вас его нет, создайте его с помощью команды:

    ssh-keygen

    Не забудьте нажать Enter, чтобы оставить его без пароля (для простоты).

  2. Отправьте свой локальный SSH-ключ на Jump Server с помощью команды:

    ssh-copy-id username@JumpServer
  3. Затем, отправьте свой SSH-ключ на целевой сервер:

    ssh-copy-id -o ProxyJump=username@JumpServer username@TargetServer

Теперь вы сможете подключаться к целевому серверу с помощью следующей команды:

ssh -J username@JumpServer username@TargetServer

2. Использование sshpass для передачи пароля

Если по каким-то причинам вы не можете использовать SSH-ключи и вам нужно передавать пароль, вы можете использовать инструмент sshpass. Этот подход менее безопасен, так как ваши пароли будут храниться в явном виде.

Чтобы использовать sshpass, выполните следующую команду:

sshpass -p 'myPassword' ssh -J username@JumpServer username@TargetServer

3. Правильное использование sshpass

Обратите внимание, что использование sshpass -p не всегда рекомендуется по соображениям безопасности. Альтернативно, вы можете указать файл, содержащий пароль:

sshpass -f /path/to/password_file ssh -J username@JumpServer username@TargetServer
Дополнительные советы:
  • Убедитесь, что на обоих серверах (Jump Server и Target Server) разрешена аутентификация по паролю.
  • Если сервер использует нестандартный запрос пароля, вы можете указать его для sshpass:
sshpass -p'myPassword' ssh -o "PubkeyAuthentication=no" -o "PasswordAuthentication=yes" -J username@JumpServer username@TargetServer
  • Чтобы проверить, как ваш сервер запрашивает пароль, вы можете использовать флаг -o для настройки параметров SSH.

Заключение

В заключение, использование SSH-ключей является более безопасным и предпочтительным методом для подключения к Jump Server и целевым серверам. Если же вам необходимо использовать пароли, sshpass можно использовать как обходной путь. Однако, рекомендуется избегать использования паролей в командной строке из соображений безопасности. Всегда старайтесь придерживаться лучших практик безопасности для защиты ваших данных и систем.

Оцените материал
Добавить комментарий

Капча загружается...