У меня есть целевой сервер под управлением Ubuntu 14.04 (назовем его destserver
) и туннельный сервер, также работающий под управлением Ubuntu 14.04 (назовем его bridgeserver
) с фиксированным IPV4-адресом. В настоящее время он настроен, поэтому при загрузке destserver
использует autossh
подключиться к bridgeserver
:
exec autossh -M 0 -N -R 2222:localhost:22 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -o "BatchMode=yes" -i /path/to/bridgeserver_mybridgeuser_id_rsa mybridgeuser@BRIDGESERVER_IP_ADDR
Я использую здесь аутентификацию по ключу, поэтому указанная выше команда может выполняться без паролей. Теперь, когда я нахожусь на своем ноутбуке в общедоступной сети, теперь я могу делать с него:
ssh -t -o ProxyCommand='ssh mybridgeuser@BRIDGESERVER_IP_ADDR nc localhost 2222' mydestuser@localhost
... и это работает нормально, за исключением того, что он запрашивает у меня два набора паролей:
$ ssh -t -o ProxyCommand='ssh mybridgeuser@BRIDGESERVER_IP_ADDR nc localhost 2222' mydestuser@localhost
mybridgeuser@BRIDGESERVER_IP_ADDR's password:
mydestuser@localhost's password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.2.0-42-generic x86_64)
...
Теперь я хотел бы сделать этот целевой сервер доступным для других людей, но я не хочу делиться какими-либо деталями аутентификации сервера моста (который я арендую лично), и поэтому я не хочу делиться паролем mybridgeuser
. Поэтому я хотел бы установить соединение, как указано выше, за исключением случаев, когда меня спрашивают только о пароле пользователя (скажем, mydestuser
) в destserver
.
Есть ssh
синтаксис, который я мог бы использовать на клиенте, чтобы я мог подключиться к destserver
используя только учетные данные пользователя из destserver
(без запроса пароля от bridgeserver
) без изменений текущей настройки с autossh
? Если необходимо внести изменения в настройку, каковы будут изменения в настройке - и как ssh
команда на ноуте как выглядит?
Хм, я могу ошибаться в этом, но я просто написал об этом в своем файле инициализации:
exec autossh -M 0 -N -R :2222:localhost:22 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -o "BatchMode=yes" -i /path/to/bridgeserver_mybridgeuser_id_rsa mybridgeuser@BRIDGESERVER_IP_ADDR
... вместо того:
exec autossh -M 0 -N -R 2222:localhost:22 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -o "StrictHostKeyChecking=no" -o "BatchMode=yes" -i /path/to/bridgeserver_mybridgeuser_id_rsa mybridgeuser@BRIDGESERVER_IP_ADDR
... обратите внимание, я просто добавил двоеточие перед тем, что раньше было 2222:localhost:22
; и теперь на ноутбуке могу выдать просто:
ssh mydestuser@BRIDGESERVER_IP_ADDR -p 2222
... и, похоже, теперь он работает, поскольку он запрашивает у меня только один пароль:
$ ssh mydestuser@BRIDGESERVER_IP_ADDR -p 2222
mydestuser@BRIDGESERVER_IP_ADDR's password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.2.0-42-generic x86_64)
...
... тогда как раньше это не позволяло?!:
$ ssh mydestuser@BRIDGESERVER_IP_ADDR -p 2222
ssh: connect to host BRIDGESERVER_IP_ADDR port 2222: Connection refused
Я не уверен, зачем понадобилось это двоеточие, поэтому я все же хотел бы прочитать правильный ответ об этом ...