===== Mostrar clave pública con su fingerprint correspondiente de servidores SSH externos ===== **Mediante terminal**. ssh-keyscan -p 22 dominio.com > /tmp/rsa && ssh-keygen -lf /tmp/rsa **Servicio online CheckSSL**: [[https://checkssh.com]] **Código PHP de CheckSSL**: [[https://checkssh.com/result/indexdotphp.txt]] Check SSH - Result "; //echo $p."
"; $f = tempnam('','CS');//http://php.net/manual/en/function.tempnam.php //echo $f."
"; shell_exec("ssh-keyscan -p ".$p." ".$h." > ".$f); $r=shell_exec("ssh-keygen -l -f ".$f." 2>&1"); //http://www.linuxweblog.com/blogs/sandip/20090101/verifying-ssh-key-fingerprint unlink($f); $pieces = explode(" ", $r);//http://php.net/manual/en/function.explode.php if(count($pieces)==4)//http://php.net/manual/en/function.count.php { echo $pieces[1]; } else { echo "ERROR: Failed to get fingerprint."; } } if(isset($_POST["host"])) { $h=$_POST["host"]; $h_length=strlen($h); if(($h_length>=1)&&($h_length<=1024)) { if(DoesItHaveInvalidChar($h)) { echo "ERROR: Host contains invalid character."; } elseif(substr($h,0,1)=="-")//http://php.net/manual/en/control-structures.elseif.php //http://php.net/manual/en/function.substr.php { echo "ERROR: The first character of host is \"-\"."; } else { $p = 22; if(isset($_POST["port"])) { if(intval($_POST["port"])>0)//http://php.net/manual/en/function.intval.php { $p = intval($_POST["port"]); } } ExecuteCommand($h,$p); } } else echo "ERROR: String length of host is not between 1 and 1024."; } else echo "ERROR: Host is not set."; ?>
Home
===== Mostrar en los logs de SSHD los fingerprint de las llaves de usuario ===== Simplemente se debe usar la opción LogLevel en el fichero de configuración del servidor /etc/ssh/sshd_config. LogLevel VERBOSE Ejemplo de linenas de logs con el fingerprint de las llaves de usuario cuando el acceso es exitoso y cuando es fallido. # Acceso exitoso. Jan 19 21:36:17 proxy sshd[6888]: Accepted publickey for root from 87.123.237.241 port 34578 ssh2: RSA d3:fa:64:0d:3e:be:3a:b0:50:cf:80:66:e8:2e:2a:a2 # Acceso denegado. Jan 19 21:36:17 proxy sshd[6888]: Failed publickey for root from 87.123.237.241 port 34578 ssh2: RSA c2:8f:3f:d0:80:6b:68:17:2d:77:7e:3c:79:d2:ae:90 ===== Mostrar fingerprint de claves públicas SSH / authorized_keys ===== Dependiendo de la versión del servidor ssh, es posible encontrarse en sus logs los fingerprint de las llaves lciente en formato MD5 o actualmente SHA256. Por lo tanto si se plantea comparar fingeprints, hay que prestar especial atención a dicho formato, ya que por ejemplo en versiones Centos menores a 6.X se usa el algoritmo MD5 mientras que las versiones posteriores implementan SHA256. La versión cliente de ssh también usará de manera predeterminada un algoritmo u otro, en versiones antiguas la opción "-E" no se encuentra disponible y la única forma de representar la fingerprint es mediante MD5. **Fingerprint de una llave pública.** # Fingerprint en SHA256. ssh-keygen -lf fichero.pub 22048 SHA256:Qvzf9agby1GUQmVVaTDg85cCO0v3aUEsIaKY8I5EpzI root@localhost.localdomain (RSA) # Usando MD5 ssh-keygen -lf fichero.pub -E md5 2048 MD5:c2:8f:3f:d0:80:6b:68:17:2d:77:7e:3c:79:d2:ae:90 root@localhost.localdomain (RSA) **Listar los fingerprints de todas las llaves en el fichero authorized_keys**.(Función para .bashrc). function fingerprints() { local file="$1" while read l; do [[ -n $l && ${l###} = $l ]] && ssh-keygen -l -f /dev/stdin <<<$l done < $file } fingerprints $HOME/.ssh/authorized_keys **Si se quiere obtener el fingerprint de una linea en concreto de authorized_keys**. (ej. Linea 2) ssh-keygen -l -f /dev/stdin <<<$(head -n 2 .ssh/authorized_keys) NOTA: No olvidar la opción "-E md5" si se están usando versiones actuales de ssh-keygen y se quiere obtener el hash en formato MD5.