<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Uuencode on inetshell</title><link>https://inet.sh/es/tags/uuencode/</link><description>Recent content in Uuencode on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 13 Nov 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/uuencode/index.xml" rel="self" type="application/rss+xml"/><item><title>Copiar archivos por Telnet/SSH con base64 o uuencode</title><link>https://inet.sh/es/posts/linux/copiar-archivos-telnet-ssh-base64-uuencode/</link><pubDate>Fri, 13 Nov 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/linux/copiar-archivos-telnet-ssh-base64-uuencode/</guid><description>Cuando solo tienes una shell por Telnet o SSH sin SCP/SFTP: convierte el archivo a texto con base64 o uuencode, pégalo del otro lado y recupéralo. Con verificación por hash.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p>Sin <code>scp</code>/<code>sftp</code>, convierte el binario a texto ASCII, pásalo por la terminal y recupéralo:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># Origen: binario -&gt; texto</span>
</span></span><span class="line"><span class="cl">base64 archivo.bin          <span class="c1"># imprime; copia la salida</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Destino: texto -&gt; binario (pega el bloque, Ctrl-D cierra)</span>
</span></span><span class="line"><span class="cl">base64 -d &gt; archivo.bin
</span></span></code></pre></td></tr></table>
</div>
</div><p>Verifica siempre con un hash en ambos lados (<code>sha256sum archivo.bin</code>). Si no coincide, el pegado perdió bytes.</p>
<h2 id="para-qué-sirve">Para qué sirve</h2>
<p>A veces solo tienes <strong>una shell</strong>: una sesión Telnet a un equipo viejo, una consola serie, un <code>ssh</code> a una jaula sin <code>scp</code>, un contenedor mínimo sin herramientas de red, o un KVM/IPMI donde solo puedes teclear. No hay transferencia de archivos, pero sí puedes <strong>escribir y leer texto</strong>.</p>
<p>El truco: cualquier archivo —incluso binario— se puede representar como texto ASCII imprimible. Lo codificas en el origen, copias el texto por la terminal, y lo decodificas en el destino. Dos herramientas hacen esto: <strong>base64</strong> (moderna, en todas partes) y <strong>uuencode</strong> (clásica, de los tiempos de UUCP y Usenet).</p>
<h2 id="opción-1-base64-recomendada">Opción 1: base64 (recomendada)</h2>
<p><code>base64</code> viene en coreutils, así que está en prácticamente cualquier Linux/BSD/macOS moderno.</p>
<p><strong>En el origen</strong> — codifica y muestra el texto:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">base64 archivo.bin
</span></span></code></pre></td></tr></table>
</div>
</div><p>Para un archivo grande, mándalo a un <code>.txt</code> y ábrelo, o imprime en una sola línea sin saltos:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">base64 -w0 archivo.bin        <span class="c1"># -w0 = sin wrap, una sola línea (GNU)</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Copia toda la salida (es texto imprimible, seguro de pegar).</p>
<p><strong>En el destino</strong> — pega el texto y decodifica:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">base64 -d &gt; archivo.bin
</span></span><span class="line"><span class="cl"><span class="c1"># pega aquí el bloque base64, luego Enter y Ctrl-D para cerrar la entrada</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>Ctrl-D</code> marca fin de entrada (EOF) y <code>base64 -d</code> escribe el binario reconstruido.</p>
<blockquote>
<p>En macOS/BSD el flag para una sola línea no es <code>-w0</code>. Usa <code>base64 -i archivo.bin</code> para codificar y <code>base64 -D</code> (D mayúscula) para decodificar. Si dudas, <code>base64 --help</code>.</p></blockquote>
<h2 id="opción-2-uuencode--uudecode-clásica">Opción 2: uuencode / uudecode (clásica)</h2>
<p><code>uuencode</code>/<code>uudecode</code> vienen en el paquete <strong>sharutils</strong>. Es lo que se usaba para mandar binarios por correo y Usenet antes de MIME. Útil si estás en un sistema viejo que ya lo trae y no tiene base64.</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># instala si hace falta</span>
</span></span><span class="line"><span class="cl">sudo apt install sharutils        <span class="c1"># Debian/Ubuntu</span>
</span></span><span class="line"><span class="cl">sudo dnf install sharutils        <span class="c1"># Fedora/RHEL</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>En el origen</strong> — el segundo argumento es el nombre que tendrá el archivo al decodificar:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">uuencode archivo.bin archivo.bin
</span></span></code></pre></td></tr></table>
</div>
</div><p>Imprime un bloque que empieza con <code>begin 644 archivo.bin</code> y termina en <code>end</code>. Copia <strong>todo</strong>, incluidas esas dos líneas.</p>
<p><strong>En el destino</strong> — pega el bloque y decodifica:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">uudecode &gt; /dev/null
</span></span><span class="line"><span class="cl"><span class="c1"># pega el bloque (begin ... end), luego Ctrl-D</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>uudecode</code> lee el nombre del propio bloque (<code>begin 644 archivo.bin</code>) y crea <code>archivo.bin</code> solo. No necesitas indicar el nombre de salida.</p>
<h2 id="verifica-siempre-con-un-hash">Verifica SIEMPRE con un hash</h2>
<p>Pegar texto largo en una terminal es frágil: un buffer que se corta, un carácter perdido, un wrap que mete un espacio. Comprueba que el archivo llegó íntegro:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># en ambos lados</span>
</span></span><span class="line"><span class="cl">sha256sum archivo.bin
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si los hashes no coinciden, el pegado se corrompió. Repite, o parte el archivo (abajo).</p>
<h2 id="comprime-antes-de-codificar">Comprime antes de codificar</h2>
<p>base64 <strong>agranda</strong> el archivo ~33%. Si lo comprimes primero, hay menos texto que pegar — y de paso empacas una carpeta entera en un solo archivo. Comprime, codifica, y del otro lado inviertes el orden: decodifica, descomprime.</p>
<p><strong>Un archivo</strong> con gzip (o bzip2 / xz, mejor ratio y más lentos):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span><span class="lnt">9
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># origen</span>
</span></span><span class="line"><span class="cl">gzip -c archivo.bin <span class="p">|</span> base64 -w0        <span class="c1"># comprime y codifica en un solo paso</span>
</span></span><span class="line"><span class="cl"><span class="c1"># bzip2 -c archivo.bin | base64 -w0     # suele comprimir más</span>
</span></span><span class="line"><span class="cl"><span class="c1"># xz   -c archivo.bin | base64 -w0      # el que más comprime (más lento)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># destino: decodifica y descomprime</span>
</span></span><span class="line"><span class="cl">base64 -d <span class="p">|</span> gzip -d &gt; archivo.bin       <span class="c1"># pega el texto, Ctrl-D</span>
</span></span><span class="line"><span class="cl"><span class="c1"># base64 -d | bzip2 -d &gt; archivo.bin</span>
</span></span><span class="line"><span class="cl"><span class="c1"># base64 -d | xz   -d &gt; archivo.bin</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>Una carpeta entera</strong> con tar (empaca + comprime + codifica):</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># origen</span>
</span></span><span class="line"><span class="cl">tar czf - carpeta/ <span class="p">|</span> base64 -w0         <span class="c1"># c=crear z=gzip f=-  -&gt;  a stdout</span>
</span></span><span class="line"><span class="cl"><span class="c1"># tar cjf - carpeta/  = bzip2 ;  tar cJf - carpeta/  = xz</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># destino: decodifica, descomprime y extrae</span>
</span></span><span class="line"><span class="cl">base64 -d <span class="p">|</span> tar xzf -                    <span class="c1"># pega el texto, Ctrl-D</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Verifica con <code>sha256sum</code> el <strong>tar.gz</strong> (no el contenido suelto) en ambos lados: es más fácil comparar un solo archivo que una carpeta.</p>
<h2 id="archivos-grandes-pártelos">Archivos grandes: pártelos</h2>
<p>Pegar megabytes de texto en una terminal es pedir problemas. Si tras comprimir sigue grande, divide antes de codificar:</p>
<div class="highlight"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl"><span class="c1"># origen</span>
</span></span><span class="line"><span class="cl">split -b 100k archivo.bin parte_        <span class="c1"># crea parte_aa, parte_ab, ...</span>
</span></span><span class="line"><span class="cl">base64 parte_aa                          <span class="c1"># pasa cada parte por separado</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># destino: reconstruye cada parte y únelas</span>
</span></span><span class="line"><span class="cl">cat parte_aa parte_ab parte_ac &gt; archivo.bin
</span></span><span class="line"><span class="cl">sha256sum archivo.bin                    <span class="c1"># verifica contra el origen</span>
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="qué-hace-cada-pieza">Qué hace cada pieza</h2>
<table>
  <thead>
      <tr>
          <th>Comando</th>
          <th>Qué hace</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>base64 archivo</code></td>
          <td>Binario → texto ASCII (líneas de 76 chars por defecto)</td>
      </tr>
      <tr>
          <td><code>base64 -w0 archivo</code></td>
          <td>Igual, pero una sola línea (GNU); útil para pegar de un tirón</td>
      </tr>
      <tr>
          <td><code>base64 -d</code></td>
          <td>Texto base64 → binario (lee de stdin hasta EOF)</td>
      </tr>
      <tr>
          <td><code>uuencode in out</code></td>
          <td>Binario → bloque <code>begin…end</code>; <code>out</code> = nombre al decodificar</td>
      </tr>
      <tr>
          <td><code>uudecode</code></td>
          <td>Bloque <code>begin…end</code> → archivo (toma el nombre del bloque)</td>
      </tr>
      <tr>
          <td><code>gzip -c</code> / <code>-d</code></td>
          <td>Comprime / descomprime a stdout (también <code>bzip2</code>, <code>xz</code>)</td>
      </tr>
      <tr>
          <td><code>tar czf - dir/</code></td>
          <td>Empaca y comprime una carpeta hacia stdout (<code>z</code>=gzip, <code>j</code>=bzip2, <code>J</code>=xz)</td>
      </tr>
      <tr>
          <td><code>tar xzf -</code></td>
          <td>Extrae una carpeta desde stdin</td>
      </tr>
      <tr>
          <td><code>split -b</code></td>
          <td>Parte un archivo en trozos de tamaño fijo</td>
      </tr>
      <tr>
          <td><code>sha256sum</code></td>
          <td>Hash para verificar integridad de punta a punta</td>
      </tr>
  </tbody>
</table>
<h2 id="traps">Traps</h2>
<ul>
<li><strong>Siempre verifica con hash.</strong> Es el único seguro contra un pegado truncado. Sin esto, crees que copiaste y tienes basura.</li>
<li><strong>El tamaño crece ~33–35%.</strong> base64 agrega ~33%, uuencode ~35%. Un binario de 3 MB son ~4 MB de texto que teclear/pegar. Para eso está <code>split</code>.</li>
<li><strong>Flags distintos en macOS/BSD vs GNU.</strong> <code>-w0</code>/<code>-d</code> son GNU; en macOS es <code>-i</code>/<code>-D</code>. No asumas.</li>
<li><strong>Cuidado con el auto-wrap del cliente de terminal.</strong> Algunos clientes Telnet/serie insertan saltos o cortan líneas largas. Si falla, usa base64 <strong>con</strong> wrap (sin <code>-w0</code>) y bloques más chicos.</li>
<li><strong>Telnet va en claro.</strong> Si pasas algo sensible por Telnet, va sin cifrar por la red. Úsalo solo en consolas locales/serie o redes de confianza; para todo lo demás, SSH.</li>
<li><strong>No es para TB.</strong> Esto es para rescatar un archivo cuando no hay otra vía, no para mover volúmenes. Si puedes usar <code>scp</code>/<code>rsync</code>/<code>sftp</code>, úsalos.</li>
</ul>
<h2 id="see-also">See also</h2>
<ul>
<li><a href="/es/posts/windows/ssh-server-2003-bitvise/">SSH a Windows Server 2003 con Bitvise</a></li>
</ul>
]]></content:encoded></item></channel></rss>