Fabric: Использование настроек ssh_config на env.gateway
У меня есть относительно стандартная установка AWS, которая выглядит так:
[ App server ] \
[ App server ] -- [ Dev gateway ]
[ App server ] /
Где серверы доступны только через 22 с IP-адреса шлюза, и шлюз открыт для мира.
Доступ к шлюзу контролируется открытым ключом, и любой, чей открытый ключ находится у пользователя шлюза (то же имя пользователя для серверов и шлюза) может войти в систему без пароля.
Наконец, у пользователя шлюза есть серверы .pem
файл как его .ssh/id_rsa
Таким образом, любой пользователь на шлюзе может напрямую войти в ssh ssh [private ip address]
,
Тем не менее, я хотел бы использовать Fabric, работающую локально на компьютере разработчика, чтобы открыть соединение с данным сервером приложений (в конечном счете, для запуска оболочки Django). Но я не могу даже установить соединение, не говоря уже о запуске оболочки. Вот что у меня есть:
env.user = 'user_name'
...
@task
def remote_shell():
run('echo on gateway')
env.gateway = 'dev_gateway'
env.host_string = 'app_server_internal_ip'
env.key_filename = '~/.ssh/id_rsa'
env.use_ssh_config = True
run('echo hello')
Это уже кажется мне излишним, просто придерживаясь каждой директивы, которую я могу придумать, но независимо от того, какую комбинацию вышеупомянутых опций я выберу, я получаю один и тот же результат:
[dev_gateway] Executing task 'remote_shell'
[dev_gateway] run: echo on gateway
[dev_gateway] out: on gateway
[dev_gateway] out:
[app_server_internal_ip] run: echo hello
[app_server_internal_ip] Passphrase for private key:
[app_server_internal_ip] Login password for 'user_name':
Очевидно, что что-то не выстраивается, поскольку пользователь может подключиться как к шлюзу, так и к серверу приложений, не вводя ни фразу-пароль, ни пароль. Что я делаю неправильно?