Я хочу ssh на удаленный частный хост, используя промежуточный (бастион, прыжок, шлюз) сервер. Эта команда отлично работает:

ssh gateway ssh private

С помощью этой настройки ~/.ssh/config:

Host gateway
  User gateway-user
  HostName XX.XX.XX.XX
  RequestTTY force

Как я могу реализовать это в моем ~/.ssh/config? Я пробовал множество итераций ProxyCommand без удачи. Я хочу использовать файл идентификации, расположенный на хосте шлюза, для доступа к частным хостам. Я хочу быть в состоянии сделать:

ssh private

Мне известна описанная здесь методика, но она требует, чтобы мой открытый ключ был на всех частных хостах, но я не хочу этого:

http://www.lorrin.org/blog/2014/01/10/one-liner-ssh-via-jump-box-using-proxycommand/

1 ответ1

0

Сначала настройте ваши ssh-ключи на шлюзе, чтобы вы могли использовать ssh для приватного доступа. Затем на вашем клиенте создайте отдельную пару личного / открытого ключа, которую вы используете для аутентификации на шлюзе. Например, ssh-keygen -t rsa -f id_gateway .

Затем на шлюзе используйте синтаксис command= в вашем файле author_keys. Например, ваша запись может выглядеть так:

command="sh -c 'ssh private ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3....

Найдите на man-странице sshd command="command" для получения дополнительной информации. Обязательно добавьте ключ id_gateway.pub к этой строке. Затем в вашем .ssh/config на вашем клиенте добавьте такую запись:

Host private
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Теперь от вашего клиента вы сможете иметь доступ к ssh private и войти напрямую. Это даже работает для scp и sftp .

Дополнительный кредит

Если вы хотите использовать это для нескольких серверов, но хотите управлять только одним открытым ключом на шлюзе, вы можете использовать следующий прием. По умолчанию sshd позволяет получать только определенные переменные из локальной среды. Одним из них является LC_PAPER который редко используется для чего-либо. Таким образом, мы можем использовать его для передачи имени хоста сервера следующим образом:

Сначала измените запись открытого ключа на

command="sh -c 'ssh $LC_PAPER ${SSH_ORIGINAL_COMMAND:-}'" ssh-rsa AAAAB3...

Затем на вашем клиенте добавьте функцию в ваш файл .bashrc (или любую используемую вами оболочку), которая выглядит следующим образом:

ssh_proxy() {
  LC_PAPER=$1 /usr/bin/ssh $*
}

Затем сделайте псевдоним, если хотите:

alias ssh=ssh_proxy

Наконец, добавьте разделы Host в ваш .ssh/config как показано выше. например:

Host private2
User gateway-user
Hostname xxx.xxx.xxx.xxx
IdentitiesOnly Yes
IdentityFile ~/.ssh/id_gateway

Теперь вы можете использовать ssh private и ssh private2 только с одним открытым ключом на шлюзе.

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