<?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>Openssh on inetshell</title><link>https://inet.sh/es/tags/openssh/</link><description>Recent content in Openssh on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/openssh/index.xml" rel="self" type="application/rss+xml"/><item><title>SSH: "no matching host key type found. Their offer: ssh-rsa" (y ssh-dss)</title><link>https://inet.sh/es/posts/linux/ssh-no-matching-host-key-type-found/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/linux/ssh-no-matching-host-key-type-found/</guid><description>Conectarte por SSH a equipos viejos (iLO, routers, NAS, Windows 2003) cuando OpenSSH responde &amp;#39;no matching host key type found. Their offer: ssh-rsa&amp;#39; o ssh-dss: HostKeyAlgorithms, PubkeyAcceptedAlgorithms, KexAlgorithms, Ciphers, y qué hacer cuando ssh-dss ya no existe en OpenSSH 10.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<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">ssh -o <span class="nv">HostKeyAlgorithms</span><span class="o">=</span>+ssh-rsa -o <span class="nv">PubkeyAcceptedAlgorithms</span><span class="o">=</span>+ssh-rsa admin@legacy-host
</span></span></code></pre></td></tr></table>
</div>
</div><p>Para que sea permanente, un bloque en <code>~/.ssh/config</code> <strong>solo para ese host</strong>:</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-text" data-lang="text"><span class="line"><span class="cl">Host legacy-host
</span></span><span class="line"><span class="cl">    HostKeyAlgorithms +ssh-rsa
</span></span><span class="line"><span class="cl">    PubkeyAcceptedAlgorithms +ssh-rsa
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si la oferta es <code>ssh-dss</code>, la opción es <code>+ssh-dss</code>, pero <strong>solo funciona en OpenSSH anterior a 10.0</strong>. Desde 10.0 (abril de 2025) DSA no existe en el cliente y <code>+ssh-dss</code> falla con <code>Bad key types</code>; toca usar un cliente viejo (<a href="/es/posts/linux/ssh-no-matching-host-key-type-found/#ssh-dss-en-openssh-10-o-superior">más abajo</a>).</p>
<h2 id="qué-significa-el-error">Qué significa el error</h2>
<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-text" data-lang="text"><span class="line"><span class="cl">Unable to negotiate with 192.168.1.10 port 22: no matching host key type found. Their offer: ssh-rsa
</span></span></code></pre></td></tr></table>
</div>
</div><p>El servidor solo sabe firmar su host key con <strong><code>ssh-rsa</code></strong>, que es RSA con <strong>SHA-1</strong>. OpenSSH 8.8 (septiembre de 2021) dejó de aceptar firmas RSA/SHA-1 por defecto porque SHA-1 está roto: según las <a href="https://www.openssh.org/txt/release-8.8">notas de la versión</a>, una colisión de prefijo elegido cuesta menos de 50 000 USD. Tu llave y el host key pueden seguir siendo RSA; lo que se rechaza es la <strong>firma</strong> con SHA-1. Un servidor moderno firma con <code>rsa-sha2-256</code> o <code>rsa-sha2-512</code> y no provoca este error.</p>
<p>Quién sigue ofreciendo solo <code>ssh-rsa</code> (o <code>ssh-dss</code>): HP iLO 2/3/4, switches y routers con firmware viejo, NAS sin actualizar, Dropbear antiguo en equipos embebidos, Windows Server 2003 con un SSH server de terceros, appliances fuera de soporte.</p>
<h2 id="variantes-del-mismo-problema">Variantes del mismo problema</h2>
<table>
  <thead>
      <tr>
          <th>Mensaje</th>
          <th>Opción</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>no matching host key type found. Their offer: ssh-rsa</code></td>
          <td><code>-o HostKeyAlgorithms=+ssh-rsa</code></td>
      </tr>
      <tr>
          <td><code>no matching host key type found. Their offer: ssh-dss</code></td>
          <td><code>-o HostKeyAlgorithms=+ssh-dss</code> (OpenSSH &lt; 10.0)</td>
      </tr>
      <tr>
          <td><code>sign_and_send_pubkey: no mutual signature algorithm</code></td>
          <td><code>-o PubkeyAcceptedAlgorithms=+ssh-rsa</code></td>
      </tr>
      <tr>
          <td><code>no matching key exchange method found. Their offer: diffie-hellman-group14-sha1,diffie-hellman-group1-sha1</code></td>
          <td><code>-o KexAlgorithms=+diffie-hellman-group14-sha1</code> (o <code>+diffie-hellman-group1-sha1</code>)</td>
      </tr>
      <tr>
          <td><code>no matching cipher found. Their offer: aes256-cbc,aes128-cbc,3des-cbc</code></td>
          <td><code>-c aes256-cbc</code> (equivale a <code>-o Ciphers=+aes256-cbc</code>)</td>
      </tr>
  </tbody>
</table>
<p><code>no mutual signature algorithm</code> es el mismo problema visto desde tu llave: el servidor solo acepta firmas <code>ssh-rsa</code> para autenticar <strong>tu</strong> llave RSA. En OpenSSH anterior a 8.5 la opción se llamaba <code>PubkeyAcceptedKeyTypes</code>; el nombre viejo sigue aceptándose como alias.</p>
<p>Un iLO 2 o 3 suele necesitar todo a la vez:</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">ssh -o <span class="nv">HostKeyAlgorithms</span><span class="o">=</span>+ssh-rsa <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    -o <span class="nv">PubkeyAcceptedAlgorithms</span><span class="o">=</span>+ssh-rsa <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    -o <span class="nv">KexAlgorithms</span><span class="o">=</span>+diffie-hellman-group14-sha1 <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    -c aes256-cbc <span class="se">\
</span></span></span><span class="line"><span class="cl"><span class="se"></span>    Administrator@ilo01
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="config-persistente">Config persistente</h2>
<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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl"># ~/.ssh/config
</span></span><span class="line"><span class="cl">Host ilo01
</span></span><span class="line"><span class="cl">    HostName ilo01.lab.example
</span></span><span class="line"><span class="cl">    User Administrator
</span></span><span class="line"><span class="cl">    HostKeyAlgorithms +ssh-rsa
</span></span><span class="line"><span class="cl">    PubkeyAcceptedAlgorithms +ssh-rsa
</span></span><span class="line"><span class="cl">    KexAlgorithms +diffie-hellman-group14-sha1
</span></span><span class="line"><span class="cl">    Ciphers +aes256-cbc
</span></span></code></pre></td></tr></table>
</div>
</div><p>Tres detalles:</p>
<ul>
<li>El <code>+</code> <strong>agrega</strong> al final de la lista por defecto. Sin <code>+</code> reemplazas la lista completa y ese host solo negociará lo que escribiste.</li>
<li>Nunca lo pongas bajo <code>Host *</code>: reactivarías SHA-1 contra todos tus servidores.</li>
<li>Si el host ya estaba en <code>known_hosts</code> con otro tipo de llave: <code>ssh-keygen -R legacy-host</code> y vuelve a conectar.</li>
</ul>
<h2 id="ssh-dss-en-openssh-10-o-superior">ssh-dss en OpenSSH 10 o superior</h2>
<p>Cronología de DSA en OpenSSH:</p>
<table>
  <thead>
      <tr>
          <th>Versión</th>
          <th>Fecha</th>
          <th>DSA (<code>ssh-dss</code>)</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>7.0</td>
          <td>2015-08</td>
          <td>Desactivado por defecto; <code>+ssh-dss</code> lo reactiva</td>
      </tr>
      <tr>
          <td>9.8</td>
          <td>2024-07-01</td>
          <td>Desactivado al compilar (<code>--enable-dsa-keys</code> para conservarlo)</td>
      </tr>
      <tr>
          <td>10.0</td>
          <td>2025-04-09</td>
          <td>Eliminado. No hay opción que lo devuelva</td>
      </tr>
  </tbody>
</table>
<p>Debian 13 (trixie) trae <code>openssh-client 10.0p1</code> y macOS Tahoe <code>OpenSSH_10.0p2</code>. En esos clientes:</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-text" data-lang="text"><span class="line"><span class="cl">$ ssh -o HostKeyAlgorithms=+ssh-dss admin@legacy-host
</span></span><span class="line"><span class="cl">command-line line 0: Bad key types &#39;+ssh-dss&#39;.
</span></span></code></pre></td></tr></table>
</div>
</div><p>Comprueba qué sabe tu cliente antes de pelearte con las opciones:</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></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-shell" data-lang="shell"><span class="line"><span class="cl">ssh -V
</span></span><span class="line"><span class="cl">ssh -Q key <span class="p">|</span> grep -c ssh-dss   <span class="c1"># 0 = tu cliente ya no habla ssh-dss</span>
</span></span><span class="line"><span class="cl">ssh -Q kex <span class="p">|</span> grep sha1         <span class="c1"># group1/group14-sha1 siguen en 10.x</span>
</span></span><span class="line"><span class="cl">ssh -Q cipher <span class="p">|</span> grep cbc       <span class="c1"># aes*-cbc y 3des-cbc siguen en 10.x</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Si el <code>grep -c</code> da <code>0</code>, la salida práctica es <strong>un cliente viejo en un contenedor</strong>. Debian 12 (bookworm) trae OpenSSH 9.2p1, que todavía compila DSA:</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">docker run --rm -it debian:bookworm bash -c <span class="s1">&#39;
</span></span></span><span class="line"><span class="cl"><span class="s1">  apt-get update -qq &amp;&amp; apt-get install -y -qq openssh-client &gt;/dev/null &amp;&amp;
</span></span></span><span class="line"><span class="cl"><span class="s1">  ssh -o HostKeyAlgorithms=+ssh-dss \
</span></span></span><span class="line"><span class="cl"><span class="s1">      -o KexAlgorithms=+diffie-hellman-group1-sha1 \
</span></span></span><span class="line"><span class="cl"><span class="s1">      admin@192.168.1.10&#39;</span>
</span></span></code></pre></td></tr></table>
</div>
</div><p>Con password funciona tal cual; si necesitas una llave, móntala con <code>-v</code>. PuTTY (y <code>plink</code>) también siguen aceptando DSA, con aviso.</p>
<p>La solución de fondo es del lado del servidor: firmware nuevo o un host key ed25519 / RSA con <code>rsa-sha2-256</code> (OpenSSH server lo soporta desde 7.2).</p>
<h2 id="ver-qué-ofrece-el-servidor">Ver qué ofrece el servidor</h2>
<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">ssh -vv admin@legacy-host 2&gt;<span class="p">&amp;</span><span class="m">1</span> <span class="p">|</span> grep -i <span class="s1">&#39;their offer&#39;</span>
</span></span><span class="line"><span class="cl">nmap -p <span class="m">22</span> --script ssh2-enum-algos legacy-host
</span></span></code></pre></td></tr></table>
</div>
</div><p><code>ssh2-enum-algos</code> lista kex, host keys, ciphers y MACs del servidor sin autenticarte.</p>
<h2 id="trampas">Trampas</h2>
<ul>
<li>Es un parche, no un arreglo: firmas SHA-1 y DH de 1024 bits (<code>group1</code>) son débiles. Úsalo solo en redes de management aisladas y planea actualizar el equipo.</li>
<li>OpenSSH 10.0 también quitó los kex <code>diffie-hellman-group*</code> de los defaults <strong>de sshd</strong>; el cliente los conserva. Si es un servidor 10.x el que rechaza a un cliente viejo, el ajuste va en <code>sshd_config</code>, no aquí.</li>
<li>En Fedora/RHEL además existe <code>crypto-policies</code>. Un bloque <code>Host</code> en <code>~/.ssh/config</code> se lee antes que la política del sistema y es más seguro que bajar todo a <code>LEGACY</code>.</li>
<li>En Windows, el <code>ssh.exe</code> integrado es OpenSSH y acepta las mismas opciones; <code>ssh -V</code> te dice qué versión traes.</li>
</ul>
<h2 id="ver-también">Ver también</h2>
<ul>
<li><a href="/es/posts/ilo/comandos-cli/">Comandos CLI de iLO</a> y <a href="/es/posts/ilo/actualizar-firmware-ssh/">actualizar firmware de iLO por SSH</a> — el cipher <code>-c aes256-cbc</code> en acción.</li>
<li><a href="/es/posts/windows/ssh-server-2003-bitvise/">SSH a Windows Server 2003 con Bitvise</a>.</li>
<li>OpenSSH: <a href="https://www.openssh.org/legacy.html">Legacy Options</a>, notas de <a href="https://www.openssh.org/txt/release-8.8">8.8</a> y <a href="https://www.openssh.org/txt/release-10.0">10.0</a>.</li>
</ul>
]]></content:encoded></item></channel></rss>