AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 1041878
Accepted
Daniel Gray
Daniel Gray
Asked: 2020-11-10 09:47:24 +0800 CST2020-11-10 09:47:24 +0800 CST 2020-11-10 09:47:24 +0800 CST

Como serializar de forma confiável e portátil informações binárias no shell POSIX

  • 772

Contexto do problema

Estou tentando implementar um orquestrador de trabalho cujos programas de agente/trabalhador se conectam a máquinas por meio de uma sessão/shell SSH. Gostaria de transferir arquivos (potencialmente binários) para esses agentes (que podem ser necessários para qualquer tipo de tarefa).

Obviamente, se as portas podem ser configuradas de alguma forma, então nce algumas instruções podem ser executadas. No entanto, estou tentando obter algo que funcione com a configuração mais restritiva.

Algo que costumo fazer ao trabalhar nesse tipo de configuração (manualmente) é serializar o arquivo em Base64 ou similar e "colar" os dados na sessão do console, algo como:

echo -n "BINARY_BASE64_DATA" | base64 --decode > file_destination.file

Gostaria de implementar algo assim para o agente/trabalhador que descrevo acima.

Pergunta

O cerne da questão é qual ferramenta usar para ter a maior superfície de compatibilidade. A maioria das máquinas Linux (mesmo as imagens básicas do Docker/Vagrant) parecem ter base64instalado. No entanto, o FreeBSD não parece ter este comando pré-instalado. Eu sei que posso instalá-lo com pkgou Ports, mas gostaria de usar algo pronto para uso o máximo possível.

Procurei algo mais POSIX/Unix-y e encontrei isto: https://en.wikipedia.org/wiki/List_of_Unix_commands que diz:

Esta é uma lista de comandos Unix conforme especificado pelo IEEE Std 1003.1-2008, que faz parte do Single UNIX Specification (SUS). Esses comandos podem ser encontrados em sistemas operacionais Unix e na maioria dos sistemas operacionais do tipo Unix.

e tem uma longa tabela de comandos, dos quais seriam os relevantes uuencodee uudecodeque estão ambos listados como "obrigatórios".

No FreeBSD, posso ver que ele é instalado de fábrica.

No meu desktop Ubuntu, ele também está presente, embora eu não saiba se saiu da caixa ou foi instalado como uma dependência de outra coisa que instalei. No entanto, dentro de uma caixa Ubuntu Vagrant ( generic/ubuntu2004, especificamente), a invocação uuencodemostra a seguinte mensagem:

$ uuencode

Command 'uuencode' not found, but can be installed with:

apt install sharutils
Please ask your administrator.

Em uma imagem do Docker baseada no Ubuntu 14.04, recebo:

# uuencode
bash: uuencode: command not found
  1. Por que o Ubuntu não inclui uuencode/ uudecodepronto para uso em todas as situações? Isso o torna menos compatível com POSIX/Unix?
  2. Existe outro comando que estou faltando que fornece o tipo de funcionalidade que estou procurando ou devo desistir e exigir que a máquina do trabalhador/agente tenha o base64binário instalado para trabalhar com o orquestrador?
linux unix freebsd posix unix-shell
  • 1 1 respostas
  • 252 Views

1 respostas

  • Voted
  1. Best Answer
    John Mahowald
    2020-11-10T16:12:30+08:002020-11-10T16:12:30+08:00

    Por que o Ubuntu não inclui uuencode/uudecode pronto para uso em todas as situações?

    Nada requer que o Ubuntu, ou qualquer outro sistema, seja compatível com a Especificação Unix Única. Os usuários que não querem sharutils podem desinstalá-lo. Especialmente em imagens reduzidas que foram otimizadas para espaço.

    Perceba que os programas normalmente instalados variam de acordo com a plataforma. O GNU coreutils fornece base64, mas é improvável que o BSD tenha o GNU instalado.

    Existe outro comando que estou perdendo que fornece o tipo de funcionalidade que estou procurando

    Scripts de shell portáteis são difíceis. base64 é relativamente fácil, e você já encontrou pequenas diferenças depois de verificar apenas 2 distribuições. Muitas vezes, as linguagens de script ajudam na portabilidade, como Python ( base64) ou Perl ( MIME::Base64).

    Parte da solução do Ansible para fazer qualquer coisa de forma portátil é com o Python, incluindo arquivos arbitrários. Considere estudar como o Ansible está fazendo as transferências de arquivos, se não usar o Ansible para a instalação inicial. E em relação à colocação de arquivos, seu wrapper em torno do sftp é bastante portátil e bem testado.

    • 2

relate perguntas

  • Protegendo um novo servidor Ubuntu [fechado]

  • (Soft) RAID 6 no Ubuntu 7.10, devo migrar para 8.10?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve