lib.ec.ssh.Paramiko: Fix URI parameters, stdin handling, and output deadlock #85

Merged
Jan Lindemann merged 3 commits from jan/fix/20260905-lib-ec-ssh-paramiko-fix-uri-parameters-stdin-handling-and-output-deadlock into master 2026-09-05 19:09:29 +02:00 AGit

View file

@ -32,10 +32,16 @@ class Paramiko(Base):
hostname = self.hostname hostname = self.hostname
if hostname is None: if hostname is None:
raise Exception('Tried to run connect without target hostname') raise Exception('Tried to run connect without target hostname')
kwargs: dict[str, Any] = {
'hostname': hostname,
'username': self.username,
'password': self.password,
'allow_agent': True,
}
if self.port is not None:
kwargs['port'] = self.port
try: try:
ret.connect( ret.connect(**kwargs)
hostname = hostname, username = self.username, allow_agent = True
)
except Exception as e: except Exception as e:
log(ERR, f'Failed to connect to {self.hostname} ({str(e)})') log(ERR, f'Failed to connect to {self.hostname} ({str(e)})')
raise raise
@ -88,5 +94,8 @@ class Paramiko(Base):
raise raise
if cmd_input is not None: if cmd_input is not None:
stdin.write(cmd_input) stdin.write(cmd_input)
stdin.channel.shutdown_write()
stdout_data = stdout.read()
stderr_data = stderr.read()
exit_status = stdout.channel.recv_exit_status() exit_status = stdout.channel.recv_exit_status()
return Result(stdout.read(), stderr.read(), exit_status, cmd = cmd) return Result(stdout_data, stderr_data, exit_status, cmd = cmd)