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

Ткань: использование настроек ssh_config на env.gateway

У меня относительно стандартная установка AWS, которая выглядит так:

[ App server ] \
[ App server ] -- [ Dev gateway ]
[ App server ] /

Где серверы доступны только через 22 с IP шлюза, а шлюз открыт для всего мира.

Доступ к шлюзу контролируется открытым ключом, и любой, чей открытый ключ находится у пользователя шлюза (одно и то же имя пользователя для серверов и шлюза), может войти по ssh без пароля.

Наконец, у пользователя шлюза есть серверы .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':

Итак, очевидно, что что-то не выстраивается, поскольку пользователь может подключиться по ssh как к шлюзу, так и к серверу приложений, даже не вводя кодовую фразу или пароль. Что я делаю не так?