Erlang:ssh身份验证错误。如何使用身份文件连接到SSH

时间:2018-08-06 03:46:57

标签: erlang elixir

尝试连接ssh主机时出现验证错误。

目标是使用本地转发连接到主机。以下命令是使用drop bear ssh客户端通过本地转发连接到主机的示例。

dbclient -N -i /opt/private-key-rsa.dropbear -L 2002:1.2.3.4:2006 -p 2002 -l
test_user 11.22.33.44

到目前为止,我拥有此代码,该代码返回空连接

ip = "11.22.33.44"
user = "test_user"
port = 2002

ssh_config = [
  user_interaction: false,
  silently_accept_hosts: true,
  user: String.to_charlist(user),
  user_dir: String.to_charlist("/opt/")
]
# returns aunthentication error
{:ok, conn} = :ssh.connect(String.to_charlist(ip), port, ssh_config)

这是我看到的错误

Server: 'SSH-2.0-OpenSSH_5.2'
Disconnects with code = 14 [RFC4253 11.1]: Unable to connect using the available authentication methods
State = {userauth,client}
Module = ssh_connection_handler, Line = 893.
Details:
  User auth failed for: "test_user"

我是长生不老药的新手,已经阅读了erlang ssh本文档已有2天了。我在文档中找不到任何难以理解的示例。

2 个答案:

答案 0 :(得分:0)

您正在使用非默认键名private-key-rsa.dropbear。默认情况下,Erlang查找以下名称集:

  

来自ssh module docs

     
      
  • 可选:在获得公钥授权的情况下,一个或多个用户的私钥。默认文件是      
        
    • id_dsa和id_dsa.pub
    •   
    • id_rsa和id_rsa.pub
    •   
    • id_ecdsa和id_ecdsa.pub`   
    •   
  •   

要验证原因,请尝试将private-key-rsa.dropbear重命名为id_rsa。如果可行,下一步将是在ssh_config上添加一个key_cb callback,它将返回正确的密钥文件名。

类似功能的一个示例实现为labzero/ssh_client_key_api

答案 1 :(得分:0)

解决方案是将dropbear密钥转换为ssh密钥。我已使用this link作为参考。

这是将dropbear键转换为ssh键的命令

/usr/lib/dropbear/dropbearconvert dropbear openssh /opt/private-key-rsa.dropbear /opt/id_rsa