我使用subprocess.Popen
实例化ssh-agent
,添加密钥并将git存储库推送到远程。为此,我将它们与&&
串在一起。我使用的代码是
subprocess.Popen("eval $(ssh-agent) && ssh-add /root/.ssh/test_rsa && git push target HEAD", shell=True)
当我将其作为.py
文件运行时,系统会提示我输入密钥的密码。这看起来像我一样。
Identity added: /root/.ssh/test_rsa (/root/.ssh/test_rsa)
。
但是当它试图将存储库推送到远程时,会发生错误。
ssh: connect to host ***.***.***.*** port 22: Connection refused
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
但是,如果我只是在交互式shell中运行相同的命令,它就可以工作。导致这种行为差异的原因是什么,我该怎么做才能解决这个问题?
答案 0 :(得分:1)
git服务器位于脚本早期启动的aws实例上。有一个检查以确保它正在运行,但是一旦启动开始,aws似乎报告一个实例正在运行。这意味着实例运行的时间很短,但ssh守护程序不存在。因为脚本非常快地移动到尝试推送,所以它在这段时间内落下,并且服务器拒绝其连接尝试。当我在交互式shell中尝试任何东西时,实例运行的时间足够长,以至于它正在工作。
简而言之,aws表示在操作系统启动服务之前,实例正在运行。