gpt4 book ai didi

ssh - 设置Fabric SSH,错误:超时

转载 作者:行者123 更新时间:2023-12-02 14:36:41 25 4
gpt4 key购买 nike

我是Fabric的新手,所以这可能是一个简单的答案,由于搜索术语不正确,所以我错过了它。

我正在尝试在AWS中启动新的ubuntu EC2实例,然后使用Fabric连接到它并让它执行几个命令。但是,似乎Fabric的SSH连接有问题,也许我在定义一些env变量错误?

@task    //starts new EC2 instance and sets env variables
def prep_deploy():
//code to start new EC2 instance, named buildhost
env.hosts=[buildhost.public_dns_name]
env.user = "ubuntu"
env.key_filename = ".../keypair.pem"
env.port = 22

@task
def deploy():
run("echo $HOME") //code fails here
....

我运行 fab prep_deploy deploy,因为我读到您需要一个新任务,新环境变量才能生效。
我懂了 Fatal error: Timed out trying to connect to ...amazonaws.com (tried 1 time) Underlying exception: timed out
实例的安全组对SSH开放:我可以通过Putty连接。实际上,如果我在deploy()开始时清空`env.host_string'变量,当它提示我手动输入主机时,我可以在“ubuntu @ ... amazonaws.com:22”中写上主机名与任务开始时的输出完全一致,它将连接到实例。但是我无法弄清楚如何操作环境变量,以便它理解主机名。

最佳答案

使用变量似乎您的结构设置正确。我能够使用您提供的代码连接到我的Ubuntu VM。我想知道由于脚本实例运行第二个任务时亚马逊实例未完全启动并无法进行连接而导致连接问题。我在其他VM主机上遇到了该问题。
我添加了以下代码来检查并再次尝试连接。这可能对您有帮助

import socket
import time

def waitforssh():
s=socket.socket()
address=env.host_string
port=22
while True:
time.sleep(5)
try:
s.connect((address,port))
return
except Exception,e:
print "failed to connec to %s:%s %(address,port)
pass

将函数调用插入部署任务中
def deploy():
waitforssh()

这应该测试连接。如果端口没有响应,它将等待5秒钟,然后重试。
那可以解释为什么您第二次尝试连接有效。

关于ssh - 设置Fabric SSH,错误:超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27477109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com