我有一个相对标准的 AWS 设置,如下所示:
[ App server ] \
[ App server ] -- [ Dev gateway ]
[ App server ] /
其中服务器仅可通过网关的 IP 超过 22 个地区访问,并且网关向全世界开放。
网关的访问由公钥控制,任何公钥在网关用户(服务器和网关的用户名相同)上的人都可以无需密码进行 ssh 访问。
最后,网关用户将服务器的.pem
文件作为其文件.ssh/id_rsa
,因此网关上的任何用户都可以通过 直接 ssh 进入ssh [private ip address]
。
话虽如此:我想使用在开发人员的机器上本地运行的 Fabric 来打开与给定应用服务器的连接(最终是为了运行 Django shell)。但我甚至无法建立连接,更不用说让 shell 运行了。以下是我所拥有的:
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 进入网关和应用服务器。我做错了什么?