lib.ec.ssh.Paramiko: Fix URI parameters, stdin handling, and output deadlock #85
1 changed files with 13 additions and 4 deletions
|
|
@ -32,10 +32,16 @@ class Paramiko(Base):
|
|||
hostname = self.hostname
|
||||
if hostname is None:
|
||||
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:
|
||||
ret.connect(
|
||||
hostname = hostname, username = self.username, allow_agent = True
|
||||
)
|
||||
ret.connect(**kwargs)
|
||||
except Exception as e:
|
||||
log(ERR, f'Failed to connect to {self.hostname} ({str(e)})')
|
||||
raise
|
||||
|
|
@ -88,5 +94,8 @@ class Paramiko(Base):
|
|||
raise
|
||||
if cmd_input is not None:
|
||||
stdin.write(cmd_input)
|
||||
stdin.channel.shutdown_write()
|
||||
stdout_data = stdout.read()
|
||||
stderr_data = stderr.read()
|
||||
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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue