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 / unix / Perguntas / 770015
Accepted
Daniel T
Daniel T
Asked: 2024-02-24 10:25:12 +0800 CST2024-02-24 10:25:12 +0800 CST 2024-02-24 10:25:12 +0800 CST

Qual é a maneira mais simples de converter entre hexadecimal SSHFP e ssh-keygen SHA256 Base64?

  • 772

Estou tentando verificar a impressão digital SSH de um servidor GitLab. Suas impressões digitais publicadas estão erradas, possivelmente devido ao balanceamento de carga. VerifyHostKeyDNS=yesnão dá erro, mas não confio em não ver impressões digitais e gostaria de fazer isso sem conectar.

SSHFP SHA1 e SHA256 estão em hexadecimal. Eu também preferiria que IDs numéricos como "4 2" fossem convertidos para nomes em inglês como "SHA256 (ED25519)".

$ resolvectl query -t sshfp ssh.gitlab.gnome.org
ssh.gitlab.gnome.org IN SSHFP 1 1 9d319c15965b939bc2086cbebca96d8bbb89e9a3 -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 1 2 591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118 -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 3 1 17b29179778339d7c91cb2c281b7afa2798c61d5 -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 3 2 4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 4 1 457e9cb0d575697e27fe8b2185580df5d45ce46b -- link: enp39s0
ssh.gitlab.gnome.org IN SSHFP 4 2 63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc -- link: enp39s0

-- Information acquired via protocol DNS in 1.1133s.
-- Data is authenticated: yes; Data was acquired via local or encrypted transport: yes
-- Data from: network

No entanto, ssh-keyscanme dá Base64 para SHA1 e SHA256. Apenas o MD5 ausente do SSHFP estaria em hexadecimal. SHA256 Base64 também é o formato que gitme avisa ao conectar. Meu caso de uso é inspecionar manualmente a impressão digital e, de alguma forma, confiá-la ~/.ssh/known_hosts. Para simplificar, só me importo com ED25519.

$ ssh-keyscan ssh.gitlab.gnome.org | tee gnome.pub
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHG6b3deoYMPwKEu9Sj+y6MBHYYUKQiAnta/go3aNv7R
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmUnZ33O26kvhcmc6k1T8xlL3yJjeNt3gphvW9/5u/CO0z5G8PGr2km4jUhStuPJR9m77LrdCF5Ywm26hsBnoxK+1zMs7YTjriiGt4r0Q5btQS5J5zFAV6aYJEmCbQz/23n8+w9Jx3hPVS8A3VE9Vd52S+5DMeIQY8QR3LPpROyCIpkR425sN0D0VjRUAH0hn61zS8N1+Pw5te2ULbBriBB9cub2n1GBCsZ2ErX1ernwKffOz/fbi5mpGbGLlJabLBm81/AiNk6NLZWTAZiNZjztxRySZFSpSzGF54kttIePxNC1x9AtW4KMaIzjVK2DIrFONyZYiEX47ox5TXlc7VQaBICUoTrR91wpb5xl2HPKP4MvFqUAzubU2V8r91ISXrnJyfwDrSB7L9Jwg6B6pN+acIttC4gOFGTJg9qanmLxtonSpwv/NaLehI1+D4LR9Or+e8jjtKSc6vu8+ghqAni3XHoT9uSmt1UPd89dOhqbpk8Hc3KTubUC3WIjGnotE=
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
ssh.gitlab.gnome.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH8NuGQ3ArFGochlv6TKXhMhsgIwG743e93pLkAQTzfgds0g0k6QBimb40zavVjITjytiSaQsf+KncJgUjYd98o=
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
# ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
$ <gnome.pub ssh-keygen -lf -
3072 SHA256:WRRpoWo7szMzwlkYFeLoj0UItmVHfAI+r+hFgzwGARg ssh.gitlab.gnome.org (RSA)
256 SHA256:TiA9po6nO6jFso7wQNy4xLlth10lIfjv1dxuDabVIqw ssh.gitlab.gnome.org (ECDSA)
256 SHA256:Y9G4dWiIfi53LR3InJWsIbv4lekUHonq/HrqTTm/rcw ssh.gitlab.gnome.org (ED25519)

Como posso conciliar os dois formatos? Idealmente, eu gostaria de passar alguns sinalizadores ssh-*ou outros comandos.

Os comandos a seguir podem fornecer as respostas corretas, mas são inaceitáveis ​​porque são muito longos para serem lembrados/digitados e estão mal formatados. Meu caso de uso seria executá-los uma vez ao configurar um novo computador, para que .bashrcos aliases não estivessem presentes.

(x="$(<gnome.pub)"; for y in sha1 sha256; do echo "$x" | ssh-keygen -lf - -E "$y"; done) | xargs -d\\n -n1 bash -c "echo \"\$0\"; echo \"\$0\" | sed 's/[^:]\+:\([^ ]\+\).*/\1=/' | base64 -d | xxd -p -c 32"
resolvectl query -t sshfp ssh.gitlab.gnome.org | grep ' IN SSHFP ' | xargs -n1 -d\\n bash -c 'echo "$0"; echo "$0" | cut -d\  -f 6 | xxd -p -r | base64'
grep -v \# gnome.pub | cut -d\  -f2- | xargs -n1 -d\\n bash -c 'ssh-keygen -r ssh.gitlab.gnome.org -f <(echo "$0")'
ssh
  • 1 1 respostas
  • 30 Views

1 respostas

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2024-02-24T19:55:09+08:002024-02-24T19:55:09+08:00

    Para converter de base64 para hexadecimal, você pode usar, perlpor exemplo:

    $ ssh-keygen -lf gnome.pub | perl -MMIME::Base64 -lpe 's{SHA256:\K\S+}{unpack("H*", decode_base64($&))}e'
    256 SHA256:63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc ssh.gitlab.gnome.org (ED25519)
    3072 SHA256:591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118 ssh.gitlab.gnome.org (RSA)
    256 SHA256:4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac ssh.gitlab.gnome.org (ECDSA)
    

    ssh-keyscantambém tem a -Dopção de imprimir a saída como registros SSHFP:

    $ ssh-keyscan -D ssh.gitlab.gnome.org
    ; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
    ssh.gitlab.gnome.org IN SSHFP 1 1 9d319c15965b939bc2086cbebca96d8bbb89e9a3
    ssh.gitlab.gnome.org IN SSHFP 1 2 591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118
    ; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
    ssh.gitlab.gnome.org IN SSHFP 3 1 17b29179778339d7c91cb2c281b7afa2798c61d5
    ssh.gitlab.gnome.org IN SSHFP 3 2 4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac
    ; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
    ssh.gitlab.gnome.org IN SSHFP 4 1 457e9cb0d575697e27fe8b2185580df5d45ce46b
    ssh.gitlab.gnome.org IN SSHFP 4 2 63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc
    ; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
    ; ssh.gitlab.gnome.org:22 SSH-2.0-OpenSSH_8.0
    

    E ssh-keygen -rpode fornecer os registros SSHFP para uma determinada chave pública, então você também pode fazer:

    $ perl -ne '
      if (/^\s*+([^#]\S*)\s+(.*)/) {
        open K, "|-", qw(ssh-keygen -f /dev/stdin -r), $1;
        print K $2;
        close K;
      }' gnome.pub
    ssh.gitlab.gnome.org IN SSHFP 4 1 457e9cb0d575697e27fe8b2185580df5d45ce46b
    ssh.gitlab.gnome.org IN SSHFP 4 2 63d1b87568887e2e772d1dc89c95ac21bbf895e9141e89eafc7aea4d39bfadcc
    ssh.gitlab.gnome.org IN SSHFP 1 1 9d319c15965b939bc2086cbebca96d8bbb89e9a3
    ssh.gitlab.gnome.org IN SSHFP 1 2 591469a16a3bb33333c2591815e2e88f4508b665477c023eafe845833c060118
    ssh.gitlab.gnome.org IN SSHFP 3 1 17b29179778339d7c91cb2c281b7afa2798c61d5
    ssh.gitlab.gnome.org IN SSHFP 3 2 4e203da68ea73ba8c5b28ef040dcb8c4b96d875d2521f8efd5dc6e0da6d522ac
    
    • 2

relate perguntas

  • Por que o utilitário ssh é considerado um pty?

  • Auto-SSH funciona manualmente, mas não em segundo plano

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • rsync porta 22 e 873 uso

  • Aborto repentino do SCP: tubo quebrado, código de autenticação de mensagem incorreto

Sidebar

Stats

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk 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