Question

Il y a un petit outil astucieux appelézssh qui facilite l'utilisation dulszrz Utilitaires pour transférer des fichiers à l'aidezmodemsur une connexion SSH existante. C'est étonnamment pratique ... mais il semble que je devrais pouvoir accomplir la même chose en utilisant expect. Je suis allé aussi loin ...

#!/usr/bin/expect -f

spawn ssh $argv
set ssh_spawn_id $spawn_id
send_user "ssh is: $ssh_spawn_id\n"

interact -o "\030B0000" {
    send_user "\nStarting zmodem receive.\n"

    spawn rz -v
    set rz_spawn_id $spawn_id
    send_user "rz is: $rz_spawn_id\n"

    while {1} {
        expect {
            eof break

            -i $rz_spawn_id -re .+ {
                send -raw -i $ssh_spawn_id $expect_out(buffer)
            }
            -i $ssh_spawn_id -re .+ {
                send -raw -i $rz_spawn_id $expect_out(buffer)
            }
        }
    }

    send_user "\nFinished zmodem receive.\n"
    set spawn_id $ssh_spawn_id
}

Cette démarrage rz Après avoir vu un ZRQINIT cadre, et il se connecte apparemmentrz à la session SSH, mais cela ne fonctionne pas. rz dit:

Retry 0: Bad CRCe.**B0100000023be50
Retry 0: Bad CRC**B0600000023d984
Retry 0: Bad CRC**B0600000023d984

...et ainsi de suite.

Existe-t-il un moyen de faire fonctionner cela? Merci!

Était-ce utile?

La solution

  1. utilisant exp_internal 1 Bien que le débogage soit extrêmement utile. Vous pouvez voir comment attendre correspond au texte entrant.

  2. Je me demande si le terminal gêne. Avant de reproduire rz, essayer stty raw. Puis après send_user "Finished..." fais stty -raw.

  3. Vous pouvez utiliser exp_continue au lieu d'une while boucle:

    spawn rz -v
    set rz_spawn_id $spawn_id
    send_user "rz is: $rz_spawn_id\n"
    
    expect {
        -i $rz_spawn_id -re .+ {
            send -raw -i $ssh_spawn_id $expect_out(buffer)
            exp_continue
        }
        -i $ssh_spawn_id -re .+ {
            send -raw -i $rz_spawn_id $expect_out(buffer)
            exp_continue
        }
        eof
    }
    

    Cela n'a rien à voir avec le problème, juste une question de style.

Autres conseils

J'ai trouvé que l'utilisation -e / --escape (Échapper à tous les caractères de contrôle) L'option du côté de l'expéditeur aide à certains problèmes qui initient la connexion ZMODEM.

par exemple:

Fichier d'envoi:

sz -e somefile.ext

Fichier de réception:

rz -e

Ceci est pratique pour transférer des fichiers sur le lien IPMI Sol (Serial-Over-LAN).

Il y a ITERM2-ZMODEM sur OSX et Konsole sur Linux avec l'intégration ZMODEM.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top