当前位置: 首页 > 知识库问答 >
问题:

尝试通过SSH连接到远程主机时出错

隆安然
2023-03-14

我正在尝试连接到远程主机以发出命令,但在运行代码时收到以下错误消息:

SSH:握手失败:SSH:密钥交换没有通用算法;提供的客户端:[curve25519-sha256@libssh.org ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521 difffie-hellman-group14-sha1],提供的服务器:[difffie-hellman-group1-sha1]紧急情况:运行时错误:无效内存地址或无指针取消引用[signal sigsegv:分段冲突代码=0x1 addr=0x10 pc=0x759836]

下面是我正在使用的代码:

func (SSHClient *SSH) Connect(mode int) {
    var SSHConfig *ssh.ClientConfig
    var auth []ssh.AuthMethod

    if mode == CERT_PUBLIC_KEY_FILE {
        auth = []ssh.AuthMethod{SSHClient.readPublicKeyFile(SSHClient.Cert)}
    }

    SSHConfig = &ssh.ClientConfig{
        User:            SSHClient.User,
        Auth:            auth,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
        Timeout:         time.Second * DEFAULT_TIMEOUT,
    }

    SSHConfig.Config.Ciphers = append(SSHConfig.Config.Ciphers, "diffie-hellman-group1-sha1")

    client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", SSHClient.IP, SSHClient.Port), SSHConfig)

    if err != nil {
        fmt.Printf("ERROR - While trying to Dial to the host %s with error: %s", SSHClient.IP, err.Error())
        return
    }

    session, err := client.NewSession()
    if err != nil {
        fmt.Printf("ERROR - While trying to create a new session on host %s with error: %s", SSHClient.IP, err.Error())
        client.Close()
        return
    }

    SSHClient.session = session
    SSHClient.client = client
}

对如何解决这个问题有什么想法吗?

提前道谢。

共有1个答案

郭易安
2023-03-14

问题是....服务器只愿意通过diffie-hellman-group1-sha1进行对话

和:

  • Golang/Go第2903期:ssh:add diffie-hellman-group1-sha1,已于6天前关闭
  • Golang/Go/问题17230:建议:X/crypto/ssh:支持来自RFC 4419的Diffie-Hellman组交换,现在正在实现。

因此,您的客户端需要一个golang.org/x/crypto/ssh的分叉,比如bored-engineer/ssh,其中commit 39a91b和commit fe5e4ff确实添加了对diffie-hellman-group1-sha1的支持。
或者安装最新的golang/crypto,其中包括commit 57b3e21。

 类似资料:
  • 我正在尝试通过SSH使用Sequel Pro连接到我的DigitalOcean SSD上的远程MySQL数据库。这是我的设置: 名称:mywebapp MySQL-主机:188.226.150.240 用户:localhost 密码:mysqlpassword 数据库:Rails 端口:3306 SSH主机:mywebapp.com SSH用户:root SSH密钥:~/.ssh/id_rsa S

  • 问题内容: 我有一个在Debian服务器上运行的MySQL实例,可以毫无问题地本地连接到它。但是,我无法远程连接到它。当我从命令行尝试此操作时,出现以下错误: 我已将用户添加为mysql,分别为“ user’@’*’和’user’@’localhost”。该服务器中的skip- networking设置为false,并且my.cnf中注释了绑定地址。我还尝试使用以下命令在iptables中打开端口

  • 每个人我需要使用服务器和客户端证书连接到服务器。我正在使用以下代码:(移植形式的android) 我已为ssl和握手启用调试属性,并获得以下输出: 我得到这个错误在Android设备和桌面java。但是我可以使用这个客户端证书自由地用网络浏览器连接到服务器。 也许这是重要的或不Url的服务器是:https://icon.sbrf.ru:9443(注意端口)也客户端证书是与西里尔名称(我不知道是这件

  • 代理的代码在这里 生成脚本在这里 我在远程计算机上启动应用程序时使用 主机上打开了两个端口6004和6005,如果jconsole是应用程序本地的,我可以通过jconsole连接到应用程序。 然后创建2个ssh隧道 ssh隧道ssh-l 6004:localhost:6004 foo@server ssh隧道ssh-l 6005:localhost:6005 foo@server 现在的问题是我无

  • 我已经在本地Windows 7和远程RHEL 7 VM上安装了JProfiler 10.0.1。 由于格式问题,此处提供了与第3点相关的输出: 一些事实: 我希望监视的远程RHEL JVM与用户“nifi”一起运行 由于我是一个“sudoer”,我使用自己的用户名“ojoqcu”通过SSH(通过Putty)连接到远程VM,然后使用“sudo su”、“su nifi”或简单的“sudo su ni

  • 我想通过ssh隧道与具有localhost访问权限的用户连接到远程MySQL。 我用这个做隧道: 和这个连接到主机: 我得到的错误是: 问题是用户“user”@“remote-host”(或“user”@“%”)不存在,只有“user”@“localhost”存在。 有没有办法强迫远程主机在不进行服务器端修改的情况下认为我来自本地主机?这是我通过ssh隧道进行连接的唯一原因。 注: 如果要连接此命