如何在elixir中创建自定义ssh shell?

时间:2019-01-11 15:31:43

标签: elixir

我正在尝试使用Erlang :ssh库在Elixir中创建自定义SSH Shell,以便可以使用一组有限的选项/命令将SSH导入我的应用程序。我设法成功登录(在这种情况下,使用密码就可以了),但是后来我既无法向客户端发送任何信息,也无法从客户端接收任何信息(至少我不知道如何)。

我已阅读:ssh库的文档,并以esshd库为例,但找不到所需的信息,因此该库对我不起作用。请参阅随附的示例代码。

def init(_opts) do
  Logger.info("--> Starting Communications.SSHD process")

  # start the erlang library
  :ssh.start()
  # config the server
  {ok, sshd2} = :ssh.daemon(10022, 
                          shell: &on_shell/2,
                          system_dir: './priv/daemon', 
                          user_passwords: [{'test', 'testpass'}], 
                          user_dir: './') 

  # link the ssh daemon pid to ourselves
  Process.link sshd2

  {:ok, []}
end

def on_shell(username, {ip, port} = peer_address) do
  Logger.info("on_shell() Called")
  # spawn a thread to handle the shell
  spawn(__MODULE__, handle_shell, [])
end

# handle the shell commands
def handle_shell() do
  Logger.info("Shell started #{inspect Process.group_leader}")
  _ = :io.setopts(Process.group_leader, binary: true, encoding: :unicode)  

  # this never appears on client or server console

  IO.puts "Interactive example SSH shell - type exit ENTER to quit"
end

有什么想法吗?

0 个答案:

没有答案