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