Шлюз Сервер Перейти Бастион Хост Локальная Настройка

Шлюз Сервер Перейти Бастион Хост Локальная Настройка

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

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

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

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

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

Найдите страницу руководства 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используя только один открытый ключ на шлюзе.

Связанный контент