У меня есть настройка сервера для рандомизации его порта SSH через определенное время и публикации порта в файле .txt, доступном на его веб-сервере.Затем я написал на своем клиенте простой скрипт, который выбирает новый порт из файла .txt веб-сервера и обновляет номер порта определенного хоста в ~ / .ssh / config .
Поскольку ~ / .ssh / config не может проанализировать переменные Bash, я вызываю сценарий с помощью ProxyCommand (я использую JumpHost, а порт JH является динамическим портом).
Мой ~ / .ssh / config следующим образом:
Host jumphost
HostName jumphost.example.com
Port 51638
User bob
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
Host myserver
HostName myserver.com
Port 2222
User bob
ProxyCommand ~/.ssh/get_dynamic_port.sh ssh -W %h:%p jumphost
Сценарий Bash выглядит следующим образом (get_dynamic_port.sh):
#!/bin/sh
PORT=$(curl -s http://jumphost.example.com/port.txt)
OLDIP=`grep -w "jumphost.example.com" -A 1 ~/.ssh/config | awk '/Port/ {print $2}'`
LINE_NUMBER=`grep -n "jumphost.example.com" -A 1 ~/.ssh/config | grep -v "jumphost.example.com" | awk '{print $1}' FS="-"`
sed -i'.bak' -e "${LINE_NUMBER}s/$OLDIP/$PORT/" ~/.ssh/config
Сценарий работает нормально и обновляет порт для jumphost.example.com, но, к сожалению, я не могу подключиться, ssh работает в отладочном выводе ниже:
macosx:$ ssh -vvv myserver
OpenSSH_7.9p1, LibreSSL 2.7.3
debug1: Reading configuration data ~/.ssh/config
debug1: ~/.ssh/config line 54: Applying options for myserver
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug1: Executing proxy command: exec ~/.ssh/get_dynamic_port.sh ssh -W myserver:2222 jumphost
debug1: identity file ~/.ssh/id_rsa type -1
debug1: identity file ~/.ssh/id_rsa-cert type -1
debug1: identity file ~/.ssh/id_dsa type -1
debug1: identity file ~/.ssh/id_dsa-cert type -1
debug1: identity file ~/.ssh/id_ecdsa type -1
debug1: identity file ~/.ssh/id_ecdsa-cert type -1
debug1: identity file ~/.ssh/id_ed25519 type -1
debug1: identity file ~/.ssh/id_ed25519-cert type -1
debug1: identity file ~/.ssh/id_xmss type -1
debug1: identity file ~/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.9
ssh_exchange_identification: Connection closed by remote host
Следует отметить, что отслеживание безопасного файла журнала на JumphostСервер не показывает никаких попыток подключения, которые могут быть признаком того, что не так.
Конфигурация jumphost прекрасно работает без сценария динамического порта, и, как указано выше, скрипт фактически изменяет порт Jumphostправильно, но после этого ssh просто терпит неудачу.
Любые идеи о том, как добиться этого или что я могу делать неправильно, будут оценены.Я мог бы просто использовать запись в crontab, чтобы запускать скрипт время от времени для обновления порта Jumphost, но я бы предпочел, чтобы порт Jumphost обновлялся только при установлении соединения с ним, просто кажется немного чище.
Спасибо:)