у меня есть 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 или обоих, чтобы по возможности избегать использования промежуточных узлов.