defmodule TrongleSSH.SSH.Daemon do alias TrongleSSH.SSH.ConnectionCLIManager use GenServer require Logger defmodule State do defstruct daemon_pid: nil end def start_link(_) do GenServer.start_link(__MODULE__, %State{}) end def init(%State{} = state) do send(self(), :start) {:ok, state} end def handle_info(:start, %State{} = state) do port = Application.fetch_env!(:tronglessh, :ssh_port) key_dir = String.to_charlist(Application.fetch_env!(:tronglessh, :key_dir)) case :ssh.daemon( port, system_dir: key_dir, ssh_cli: {ConnectionCLIManager, [%ConnectionCLIManager.State{}]}, no_auth_needed: true, id_string: :random, parallel_login: true, subsystems: [] ) do {:ok, daemon_pid} -> Logger.info("SSH server started on port #{port}, on #{inspect(daemon_pid)}") {:noreply, %State{state | daemon_pid: daemon_pid}} {:error, err} -> raise inspect(err) end end def handle_info(_, state), do: {:ok, state} end