Назад | Перейти на главную страницу

ProxyCommand ansible option выбрасывает ssh: ошибка недопустимого параметра

Контекст

Проблема

у меня есть machine A что я могу получить доступ только через шлюз, который мы называем machine G через ssh.

Внешний IP-адрес машины G: 10.X.X.X.

Внутренний IP-адрес машины A: 192.168.32.10.

Я хочу применить ansible playbook на пульте machine A с помощью ProxyCommand вариант через шлюз machine G.

В group_vars/all инвентарь vars file inventory, я поставил следующий вариант в соответствии с документация :

ansible_ssh_common_args: '-o ProxyCommand="ssh -q -W %h:%p -p {{ JUMPER_PORT }} root@{{ JUMPER_IP }}"'

Я выполняю следующую командную строку, чтобы запустить ansible:

ansible -i $PWD all \
-m ping \
--extra-vars="JUMPER_IP=10.X.X.X JUMPER_PORT=6666"

Но команда выдает ошибку недопустимого параметра ssh. Вот результат:

<---> (255, b'', b'ssh: illegal option -- -
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [- c cipher_spec]
   [-D [bind_address:]port] [- E log_file] [-e escape_char]
   [-F configfile] [-I pkcs11] [-i identity_file]
   [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]           
   [-O ctl_cmd] [-o option] [- p port] [-Q query_option] [-R address]           
   [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]          
   [user@]hostname [command]
')

<global> SSH: EXEC ssh -C -o 
ControlMaster=auto -o . 
ControlPersist=60s -o 
KbdInteractiveAuthentication=no 
-o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey 
-o PasswordAuthentication=no 
-o ConnectTimeout=10
-o 'ProxyCommand=ssh -q -W %h:%p 
-p 6666 root@10.X.X.X'
-o ControlPath=/Users/me/.ansible/cp/853aabe504 
global '/bin/sh -c '"'"'echo ~ && sleep 0'"'"''

--- | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh: illegal option -- 
    -\nusage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c 
    cipher_spec]\n           [-D [bind_address:]port] [-E log_file] [-e 
    escape_char]\n           [-F configfile] [-I pkcs11] [-i 
    identity_file]\n           [-J [user@]host[:port]] [-L address] [-l . 
    login_name] [-m mac_spec]\n           [-O ctl_cmd] [-o option] [-p 
    port] [-Q query_option] [-R address]\n           [-S ctl_path] [-W 
    host:port] [-w local_tun[:remote_tun]]\n           [user@]hostname 
    [command]\n",
    "unreachable": true
}

Похоже, что -W %h:%p не заменяйте хост и порт.

Любая идея ?

Вы следуете крайне устаревшему руководству.

Последние версии OpenSSH, включая ту, которую вы используете, имеют очень простой синтаксис для указания узла перехода:

ssh -J [jumpuser@]jumphost[:jumpport] destination

Итак, вы можете просто сделать что-то вроде этого:

ansible_ssh_common_args: "-J root@{{JUMPER_IP}}:{{JUMPER_PORT}}"

В качестве передового опыта рассмотрите возможность использования VPN, IPv6 или обоих, чтобы по возможности избегать использования промежуточных узлов.