我在 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"
}
也许您必须发送一个空数据包才能保持连接处于活动状态。 连接后添加
client.get_transport().set_keepalive(60)
。这会发送一个空数据包以保持连接每 60 秒处于活动状态