2013-10-30 73 views
0

我试图自动化使用python脚本从生产转储创建postgres数据库的过程。我在承载RoR应用服务器的EC2实例上运行此脚本。python:如何从EC2实例在本地计算机上运行命令

我能够使用psychopg创建数据库。但在同一脚本中,我想要做以下事情:

- do a deploy using capistrano from local machine 

我在我的研究中遇到了paramiko - SSHClient。我认为它可以使用。但我不知道如何从EC2实例到我的本地机器进行SSH连接。 我发现我的IP(说ABCD)和EC2实例试图ssh a.b.c.d,但它说:

ssh: connect to host a.b.c.d port 22: Connection refused 

所以我的问题是: - 如果此方法(使用的paramiko)是正确的,我怎么能成立从EC2实例ssh连接到我的本地机器 OR 如果的paramiko不能做到这一点,我如何从我的脚本运行的部署是在EC2实例

+0

你可以设置反向ssh隧道(google it;)) –

+0

@Puciek:谢谢。我会尝试这个 – nish

回答

1

对于一个,的paramiko是有点低级别的,你可以尝试使用Fabric,它会让很多事情变得更容易。

其次,检查本地计算机是否是

  • 从Internet访问,即有
  • 运行SSH(假设你运行* NIX样的操作系统,运行ps -ef | grep sshd, 如果你看到的公共IP地址一个进程匹配,那么你应该能够连接)

然后,如果你想上一个 EC2实例自动执行的Postgres数据库创建,为什么你需要一个CONNEC从它到你的本地机器。扭转这一过程不是更合乎逻辑吗?即SSH 本地机器到EC2实例。

+0

谢谢你的一个非常有用的答案。关于你的第三点:当我开始编写脚本时,我没有意识到我将不得不添加部署功能。由于数据库在EC2中是必需的,因此我在EC2中编写了脚本。令人惊讶的是,同样的脚本在我的本地机器上工作。不知道为什么 – nish

+0

原因您的本地计算机不运行SSH我想?你在使用哪种操作系统? – favoretti

+0

我刚刚使用你提到的命令进行了检查。它显示正在运行的进程我使用的是Ubuntu 12.04 – nish

相关问题