Como obter o arquivo para um host quando tudo que você tem é um console serial?
Quando tudo o que você tem é um console serial (por exemplo, via telnet por meio de um servidor de terminal), quais métodos podem ser usados ​​para transferir arquivos de entrada / saída de um host?
Recortar / colar funciona para as coisas pequenas / imprimíveis e eu brinquei com uma combinação de uuencode / uudecode (com gzip) manipular o imprimível, mas tudo é muito limitador.
Dado alguns dos comentários que você deixou sobre a disponibilidade dos utilitários, ajudaria se você pudesse nomear a plataforma e / ou descrever o ambiente em que está. Caso contrário, você receberá o estoque Kermit / XMODEM / YMODEM / O ZMODEMk via terminal responde ...
Passo a maior parte do meu dia atrás da caixa Solaris. Então, nesses termos, se tudo o que você tinha era SUNCreq (ou talvez SUNWCuser), qual seria a resposta?
apenas 5 anos atrasado:: P Agora você pode aceitar minha resposta, porque era exatamente o que você queria .... mas provavelmente não precisa hoje.
Eu tenho lrzszou kermitno lado remoto
O caso mais fácil é se você tiver um sólido programa de transferência de arquivos binários instalado no lado remoto, como lrzszou kermit. Isso foi mais comum do que hoje, mas seu sistema específico ainda pode ter um deles.
O programa de console serial que você está usando no local quase certamente tem uma maneira de fazer upload de Zmodem ou Kermit, o que permite enviar o que você precisar diretamente.
No caso do Zmodem, basta digitar rzno sistema remoto, que envia uma string especial que o terminal serial local deve entender, fazendo com que apareça uma caixa de diálogo do seletor de arquivos.
Existem várias vantagens de usar um bom programa de transferência de arquivo binário como lrzszou kermit: eficiência, checksumming, tentativas automáticas, retomada transferência abortada, a transferência de arquivos múltiplos, etc., mas estes são luxos . Se você precisar enviar apenas um arquivo ou estiver enviando arquivos raramente, poderá fazer o upload de arquivos ASCII.
Como os protocolos de terminal interpretam muitos dos valores de bytes que ocorrem em um arquivo de dados binários, não é possível enviar o arquivo diretamente pela mesma conexão; se o fizer, o código de emulação de terminal em cada extremidade tentará interpretar alguns dados, corrompendo-os e provavelmente confundindo o código de manipulação de terminais.
Você pode contornar isso codificando os dados binários em um subconjunto seguro de ASCII no lado local e, em seguida, transformando-os novamente em dados binários brutos no lado remoto. É isso que os programas uuencodee base64fazem, diferindo apenas em pequenas escolhas de algoritmos.
Quando o upload do arquivo terminar, pressione Ctrl-Cpara sair cat. Agora você tem seu arquivo decodificado no sistema remoto, conforme desejado.
Mas eu tenho muitos arquivos para enviar e a transcodificação imprimível em ASCII é uma dor!
Não é difícil inicializar-se com um nível superior de tecnologia. Se o sistema remoto tiver um compilador C, você poderá usar a técnica anterior para enviar ao sistema remoto uma cópia do lrzszcódigo-fonte. No lado local:
Depois de iniciar o primeiro comando, faça um "upload ASCII" do lrzsz.tgz.uuearquivo no sistema remoto. O pipeline aceita os dados codificados e decodifica-os em um tarball binário para você, que você pode descompactar e construir.
Se você ainda não possui um compilador no sistema remoto, pode compilar de forma cruzada o programa rz(ou o que for) no sistema local e enviá-lo ao sistema remoto usando a técnica acima.
Você deve atribuir o nome do arquivo de entrada a esta versão uuencodeduas vezes, uma vez para nomear a origem dos dados de entrada e novamente para declarar como o sistema remoto deve chamar o arquivo quando decodificar os dados em um arquivo de saída. É possível que você queira que o sistema remoto tenha um nome diferente para seu arquivo de saída.
Sua versão local uuencodepode se comportar de maneira diferente.
Fantástico, eu esperava que esta pergunta tivesse uma resposta mencionando kermit! 1;)
Esta é uma boa resposta, eu gosto da seção "Mas eu não tenho". Infelizmente, ele pára em coisas bastante pop e não vai muito fundo. Criando arquivos executáveis ​​binários para arquiteturas diferentes, apenas dos códigos ASCII? Aqui é para inicialização: retrocomputing.stackexchange.com/questions/4672/...
Basicamente, você precisa usar métodos de pré-Internet para transferir através de um serial tty e precisa ter uma maneira de receber a transferência do outro lado. Obviamente, a melhor maneira de fazer isso é usando o ZMODEM, o que significa que você precisa de uma ferramenta como a szjá recebida. No entanto, isso nem sempre é possível, por exemplo, quando o destino de recebimento é um roteador sem rede.
Agora, verifique se o comando com send-file é,, ascii-xfresta foi a minha linha de comando de conexão
Normalmente queremos ascii-xfrdo lado receptor, mas como não o temos, isso -nfunciona contornando as terminações de linha corretas.
No picocom, basta pressionar CTRL + a + s e digitar o caminho completo do arquivo que estou enviando. Depois que a transferência for concluída, você precisará CTRL + c para quebrar isso cat.
(E dois anos depois ...) na minha experiência em transferir arquivos entre sistemas que terminam com linhas finais (obrigado Microsoft!), A codificação / decodificação base64 não se importa com o estilo de final de linha. \r\nou apenas os \ndois funcionam mesmo que sejam "consertados" ao longo do caminho. Não me lembro de imediato se isso estiver no padrão base64 ou apenas nas ferramentas que usei, mas suspeito que seja realmente um comportamento padrão.
— Andrew Henle 23/09
Talvez você deva experimentar o minicom .
Isso não requer algo como 'sx' ou 'sz' no host de origem?
Não, o minicom lida com seus próprios xfers de arquivo. sx, sy, sz e rx, ry, rz são programas separados, geralmente encontrados em pacotes apropriadamente chamados lszrz ou algo assim. Embora eu sugira usar sz e rz. Pequeno, simples e faz o que faz. Minicom é um emulador de terminal inteiro.
— reiche 11/08/10
Esta resposta não está correta. O Minicom gera lrzsz para transferências de arquivos. O Minicom não pode e não lida com suas próprias transferências de arquivos.
Não sei se isso funcionaria se tudo o que você tinha fosse um console serial, mas se você tiver acesso à rede, poderá nc(1)copiar arquivos usando o TCP / IP.
No exemplo acima, eu clonei sdbYYYde uma caixa de origem para sdaXXXa caixa de destino. Minha escolha de 8675 para um número de porta TCP foi arbitrária; você pode usar qualquer porta à qual tenha acesso. E não precisa ser um dispositivo; pode ser qualquer arquivo.
No segundo exemplo, copiei minha chave pública rsa ( ~/.ssh/id_rsa.pub) e a adicionei ao arquivo de chaves autorizadas para o host de destino.
Posso sugerir um grande sinal vermelho acima da sua primeira ideia? Alguns alma solitária com o coração para aprender pode executar algo parecido com a esperança de cópia de arquivos apenas, sem ler o seguinte parágrafo primeiro, é claro :)
Eu usaria o kermit , o avô dos programas de transferência de arquivos. Já o usamos muito antes de haver o Linux.