move password/tor_socks into Host attributes

we set those parameters usually just once.
This commit is contained in:
Jörg Thalheim
2025-05-04 10:15:40 +02:00
parent 0dc7e71e21
commit 75cb031e6e
2 changed files with 9 additions and 14 deletions

View File

@@ -87,7 +87,7 @@ def ssh_shell_from_deploy(
deploy_info: DeployInfo, runtime: AsyncRuntime, host_key_check: HostKeyCheck deploy_info: DeployInfo, runtime: AsyncRuntime, host_key_check: HostKeyCheck
) -> None: ) -> None:
if host := find_reachable_host(deploy_info, host_key_check): if host := find_reachable_host(deploy_info, host_key_check):
host.connect_ssh_shell(password=deploy_info.pwd) host.connect_ssh_shell()
else: else:
log.info("Could not reach host via clearnet 'addrs'") log.info("Could not reach host via clearnet 'addrs'")
log.info(f"Trying to reach host via tor '{deploy_info.tor}'") log.info(f"Trying to reach host via tor '{deploy_info.tor}'")
@@ -96,8 +96,7 @@ def ssh_shell_from_deploy(
msg = "No tor address provided, please provide a tor address." msg = "No tor address provided, please provide a tor address."
raise ClanError(msg) raise ClanError(msg)
if ssh_tor_reachable(TorTarget(onion=deploy_info.tor, port=22)): if ssh_tor_reachable(TorTarget(onion=deploy_info.tor, port=22)):
host = Host(host=deploy_info.tor) host = Host(host=deploy_info.tor, password=deploy_info.pwd, tor_socks=True)
host.connect_ssh_shell(password=deploy_info.pwd, tor_socks=True)
else: else:
msg = "Could not reach host via tor either." msg = "Could not reach host via tor either."
raise ClanError(msg) raise ClanError(msg)

View File

@@ -29,12 +29,14 @@ class Host:
user: str | None = None user: str | None = None
port: int | None = None port: int | None = None
private_key: Path | None = None private_key: Path | None = None
password: str | None = None
forward_agent: bool = False forward_agent: bool = False
command_prefix: str | None = None command_prefix: str | None = None
host_key_check: HostKeyCheck = HostKeyCheck.ASK host_key_check: HostKeyCheck = HostKeyCheck.ASK
meta: dict[str, Any] = field(default_factory=dict) meta: dict[str, Any] = field(default_factory=dict)
verbose_ssh: bool = False verbose_ssh: bool = False
ssh_options: dict[str, str] = field(default_factory=dict) ssh_options: dict[str, str] = field(default_factory=dict)
tor_socks: bool = False
def __post_init__(self) -> None: def __post_init__(self) -> None:
if not self.command_prefix: if not self.command_prefix:
@@ -201,18 +203,16 @@ class Host:
def ssh_cmd( def ssh_cmd(
self, self,
verbose_ssh: bool = False, verbose_ssh: bool = False,
tor_socks: bool = False,
tty: bool = False, tty: bool = False,
password: str | None = None,
) -> list[str]: ) -> list[str]:
packages = [] packages = []
password_args = [] password_args = []
if password: if self.password:
packages.append("sshpass") packages.append("sshpass")
password_args = [ password_args = [
"sshpass", "sshpass",
"-p", "-p",
password, self.password,
] ]
ssh_opts = self.ssh_cmd_opts ssh_opts = self.ssh_cmd_opts
@@ -221,7 +221,7 @@ class Host:
if tty: if tty:
ssh_opts.extend(["-t"]) ssh_opts.extend(["-t"])
if tor_socks: if self.tor_socks:
packages.append("netcat") packages.append("netcat")
ssh_opts.append("-o") ssh_opts.append("-o")
ssh_opts.append("ProxyCommand=nc -x 127.0.0.1:9050 -X 5 %h %p") ssh_opts.append("ProxyCommand=nc -x 127.0.0.1:9050 -X 5 %h %p")
@@ -235,12 +235,8 @@ class Host:
return nix_shell(packages, cmd) return nix_shell(packages, cmd)
def connect_ssh_shell( def connect_ssh_shell(self) -> None:
self, *, password: str | None = None, tor_socks: bool = False subprocess.run(self.ssh_cmd())
) -> None:
cmd = self.ssh_cmd(tor_socks=tor_socks, password=password)
subprocess.run(cmd)
def is_ssh_reachable(host: Host) -> bool: def is_ssh_reachable(host: Host) -> bool: