Paramiko exec_command 使 lambda 函数超时

问题描述 投票:0回答:1

我在 AWS lambda 上遇到了 paramiko 的问题,当调用 ssh 函数时,我的函数超时。奇怪的是,这种超时只是间歇性地发生。例如,当我将命令更改为 PWD,然后返回到下面代码片段中的命令时,该函数将返回该命令所期望的内容。此外,这段代码在我的本地机器上测试时工作正常。

我的 lambda 函数位于 AWS 内正确的 VPC 和安全组中,可以通过 ssh 登录到主机,并且 lambda 不会超出分配给它的内存。

问题是否明显是我遗漏的?请帮忙!

我的代码

class fileFinder:

    _uname = None
    _password = None

    def __init__(self, secret, params) -> None:
        self._uname = secret["uname"]
        self._password = secret["password"]
        self.params=params
    

    def ssh(self):
        
        try:
            client = SSHClient()
            
            client.set_missing_host_key_policy(AutoAddPolicy())
            
            client.connect(hostname="myhost", username=self._uname, password=self._password)

            stdin, stdout, stderr  = client.exec_command(' cd /my/cool/pathway; find ./ -name "PREFIX*.hst"  -newerct "2023-09-01T00:00" -not -newerct "2023-10-01T11:09"')
            output = stdout.read().decode("utf8")

            return self.buildResponse(output)
        except Exception as error:
            print("there was an error" + repr(error))

        
    def buildResponse(self, stdout)  :
        
        
        fileList: list[str] = []

        currFname: str = ""

        for i in range(len(stdout)):
            if stdout[i] == "." and stdout[i+1] == "/" or stdout[i] ==  "/" :
                continue
            elif stdout[i] == "\n":
                fileList.append(currFname)
                currFname = ""
            else:
                currFname += stdout[i]    
        
        return {"logs" : fileList}


故障代码

{
  "errorMessage": "2023-10-02T18:14:32.828Z 7b520d57-bc32-49b6-8da7-653c24a1bfe5 Task timed out after 20.02 seconds"
}
python amazon-web-services aws-lambda paramiko
1个回答
0
投票

也许您必须发送一个空数据包才能保持连接处于活动状态。 连接后添加

client.get_transport().set_keepalive(60)
。这会发送一个空数据包以保持连接每 60 秒处于活动状态

© www.soinside.com 2019 - 2024. All rights reserved.