def run_single(self, command, ssh=None):
"""Runs a single cmd command on the remote host
"""
if not ssh:
if not self.create_ssh_channel():
return {"rc": 1,
"stderror": "Error creating ssh channel",
"stdout": "",
"function": self.function_name}
ssh = self.ssh
reads = None
cmd = command
if isinstance(command, dict):
cmd = command['cmd']
reads = command['reads']
rc = 0
std_out = ""
std_error = ""
if not CREDS.DRY_RUN:
# Dangerous, only use if commands are filtered/protected
# Only commands either defined here or in the command.conf should
# run here.
if reads:
# Only use invoke shell if needed
channel = ssh.invoke_shell() # nosec
channel.settimeout(SESSION_SHELL_TIMEOUT)
# Remove any ssh login messages
send_command(channel, "")
read_commands = []
for param, value in reads.items():
read_commands.append("read -s %s" % param)
read_commands.append(value)
# Don't want to log any read commands
send_command(channel, read_commands)
std_out, std_error, rc = send_command(channel, self._add_root(cmd))
else:
stdin, stdout, stderr = ssh.exec_command(self._add_root(cmd), get_pty=True, timeout=SESSION_TIMEOUT) # nosec
rc = stdout.channel.recv_exit_status()
std_out = stdout.read()
std_error = stderr.read()
stdin.flush()
return {"stdout": std_out,
"stderror": std_error,
"function": self.function_name,
"rc": rc}
# Helper ssh function
评论列表
文章目录