Вот сценарий: пользователь запускает «ssh -i sshkey user @ server1». Я хочу, чтобы соединение SSH было туннелировано через server1 на server2. Обычно пользователь может сделать это сам, используя:
ssh -i sshkey user@server1 -o 'ProxyCommand /bin/nc server2 22'
Однако я не хочу, чтобы пользователь сам настраивал прокси, используя аргументы командной строки ssh или даже изменения ssh_config. Как системный администратор, я хочу иметь возможность прозрачно перенаправлять сеанс SSH пользователя на другой сервер. Все решения, которые я нашел до сих пор, требуют ProxyCommand. Есть ли у меня способ добиться этого?
Обратите внимание, что пользователь использует ключи SSH, а не имя пользователя / пароль, поэтому эти учетные данные необходимо передать на server2.
Я могу придумать два способа сделать это:
Принудительная команда в пользователе AuthorizedKeysFile
(т.е. ~/.ssh/authorzied_keys
) на server1:
Запись будет выглядеть так
command="ssh server2" ssh-rsa AAAA...[rest of sshkey.pub]
Тогда команда ssh -i sshkey server1
отправит пользователя прямо на server2.
Или, изменить оболочку пользователя на server1, установив что-то вроде /bin/proxyshell
, содержание которого будет:
#!/bin/bash
ssh server2
Я подозреваю, что вопрос содержит недоразумение по поводу использования SSH ProxyCommand.
ProxyCommand не может использоваться для подключения к server2 через server1, но для подключения к server1 с помощью данной команды (которая может включать server2, например, в качестве прокси). Этой команде потребуется собственный способ аутентификации на server2 (см., Например, https://stackoverflow.com/questions/1040089/how-do-i-use-github-through-harsh-proxies для различных вариантов аутентификации на веб-прокси).
Если ProxyCommand успешно подключится к server1, пользователь будет аутентифицирован там обычным способом (ами).