SSH-Agent, falsche Paketlänge

WBOY
Freigeben: 2024-02-09 14:00:36
nach vorne
868 Leute haben es durchsucht

SSH 代理,数据包长度错误

PHP-Editor Xinyi stellt Ihnen heute einen häufigen Netzwerkfehler vor – „SSH-Proxy, Paketlängenfehler“. Bei Verwendung des SSH-Agent-Tools wird manchmal diese Fehlermeldung angezeigt, die dazu führt, dass die Netzwerkverbindung fehlschlägt. Dieser Fehler wird normalerweise dadurch verursacht, dass die Paketlänge falsch eingestellt ist. In diesem Artikel erklären wir die Ursache dieses Fehlers im Detail und bieten einige Lösungen zur Behebung des Problems und stellen sicher, dass Ihre Netzwerkverbindung reibungslos funktioniert.

Frageinhalt

Implementieren des SSH-Proxys in Go, Fehler aufgrund falscher Paketlänge, das sind die Fehler von SSH im Debug-Modus:

debug1: ssh2_msg_kexinit sent
bad packet length 1231976033.
ssh_dispatch_run_fatal: connection to ::1 port 8080: message authentication code incorrect
Nach dem Login kopieren

Code:

func handleSSH(conn net.Conn, r *bufio.Reader, protocol string) {

    target, err := url.Parse("ssh://localhost:3333")
    if err != nil {
        fmt.Println("Error parsing target", err)
        conn.Close()
        return
    }

    targetConn, err := net.Dial("tcp", target.Host)
    if err != nil {
        fmt.Println("error dialing SSH target:", err)
        conn.Close()
        return
    }

    defer targetConn.Close()

    var wg sync.WaitGroup
    wg.Add(2)
    go func() {
        _, err := io.Copy(targetConn, conn)
        if err != nil {
            fmt.Println("error copying data to target:", err)
        }
        wg.Done()
    }()

    go func() {
        _, err := io.Copy(conn, targetConn)
        if err != nil {
            fmt.Println("error copying data from target:", err)
        }
        wg.Done()
    }()

    wg.Wait()
    conn.Close()
}

// EDIT

func connection(conn net.Conn) {

    r := bufio.NewReader(conn)
    protocol, err := r.ReadString('\n')
    if err != nil {
        fmt.Println("Error reading first line", err)
        conn.Close()
        return
    }

if protocol[0:3] == "SSH" {
        handleSSH(conn, r, protocol)
    }
}

func main() {
   ln, err := net.Listen("tcp", ":8080")
    if err != nil {
        panic(err)
    }
    defer ln.Close()

    for {
        conn, err := ln.Accept()
        if err != nil {
            panic(err)
        }
        go connection(conn)
    }
}
Nach dem Login kopieren

BEARBEITEN: Code mit relevanten Informationen zum Herstellen der Verbindung und Reproduzieren des Fehlers hinzugefügt.

Meine beste Vermutung ist, dass der SSH-Aushandlungsprozess unterbrochen wurde und die Dinge nicht mehr synchron waren.

Workaround

Der Code liest die erste Zeile vom Client und überprüft den Protokolltyp, sodass der entsprechende Handler aufgerufen wird:

protocol, err := r.ReadString('\n')
...
if protocol[0:3] == "SSH" {
        handleSSH(conn, r, protocol)
    }
}
Nach dem Login kopieren

Aber der Code kann die gelesenen Bytes nicht an den verbundenen Server weiterleiten. Diese Bytes befinden sich unter protocol 中,并提供给 handlessh. Sobald die Verbindung jedoch hergestellt ist, können diese Bytes nicht mehr an den verbundenen Server gesendet werden. Stattdessen werden nur neue Daten zwischen Client und Server kopiert.

Das bedeutet, dass der Server die erste Zeile nicht vom Client erhält. Daher kann es zu einer Beschwerde über einen Protokollfehler wie invalid ssh id string. kommen, der an den Client weitergeleitet und fälschlicherweise als gültige Daten von der SSH-Verbindung interpretiert wird.

Das obige ist der detaillierte Inhalt vonSSH-Agent, falsche Paketlänge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!