我用什么命令来查看服务器的ECDSA密钥指纹是什么?

时间:2012-04-08 05:04:51

标签: linux security ssh rsa openssh

我在Google上看到有关如何查看RSA密钥指纹的信息,而不是ECDSA指纹。

4 个答案:

答案 0 :(得分:102)

等等,我找到了。运行命令:

ssh-keygen -l -f /etc/ssh/ssh_host_ecdsa_key.pub

答案 1 :(得分:14)

最近的ssh(OpenSSH_6.0p1,OpenSSL 1.0.0j 2012年5月10日),我的脚本如下:

ssh-keyscan -t ecdsa localhost 2>&1 | grep ecdsa
localhost ecdsa-sha2-nistp256 AAAAE2VlongKey...=

注意:

  • 如果您的sshd在自定义端口上运行,请在-p portNumber命令中添加“ssh-keyscan
  • ssh-keyscanstderr上写,而不是stdout(!),因此bash重定向'2>&1'(根据您的shell可能会有所不同)

这是我添加到~/.ssh/known_hosts文件的行,以便从localhost为我的测试授权ssh请求(主要用于gitolite, which uses ssh)。


Daniel Böhmer确认in the comments

  
      
  • ssh-keyscan提供SSH服务器的完整公钥
  •   
  • ssh-keygen的输出几乎与公钥文件的格式相同   只需删除第一列(IP地址或主机名)并保存或将其传送到显示指纹的ssh-keygen -l
  •   
丹尼尔补充说:

  

显示~/.ssh/know_hosts中存储的所有服务器公钥的指纹:

cut -d' ' -f2- ~/.ssh/known_hosts | while read line; do echo "$line" | ssh-keygen -lf-; done

答案 2 :(得分:6)

在我的系统上,我需要指定一个MD5密钥而不是默认的SHA256:

  SET SERVEROUTPUT ON;
   DECLARE
   c_minprice products.price%type;
   c_maxprice products.price%type;
  BEGIN
   c_minprice := get_phone(200);
   c_maxprice := get_phone(500);
  END;


 ERROR from executing the above:
c_minprice := get_phone(200);
              *

ERROR at line 5: 
 ORA-06550: line 5, column 15: 
 PLS-00306: wrong number or types of arguments in call to 'GET_PHONE' 
 ORA-06550: line 5, column 1: 
 PL/SQL: Statement ignored 
 ORA-06550: line 6, column 15: 
 PLS-00306: wrong number or types of arguments in call to 'GET_PHONE' 
 ORA-06550: line 6, column 1: 
 PL/SQL: Statement ignored 

  ****Sample Snip-its form my code:

   CREATE OR REPLACE PROCEDURE get_phone
   (
    c_minprice IN products.price%type,  
    c_maxprice IN products.price%type,  
    i_result OUT VARCHAR2 
  ) AS

--Checking if starting price range is valid or not
IF c_minprice IS NULL THEN
   i_result := 'Starting price range should be valid and cannot be empty';
  RAISE V_MINPRICE; -- Raising exception if starting price is null
END IF;

 --Checking if end price range is valid or not
IF c_maxprice IS NULL THEN
  i_result := 'End price range should be valid and cannot be empty';
  RAISE V_MAXPRICE; -- Raising exception if end price is null
END IF;  

这将输出一个字符串,其格式与我在客户端上看到的错误相匹配。

答案 3 :(得分:1)

使用的命令

  • 显示存储在服务器上的公共主机密钥的ascii艺术(要在服务器端完成,您要通过ssh连接到TO):

    ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
    

    -l <​​/ strong>:显示指定公钥文件的指纹。

    -v :视觉(ascii艺术)

    -f :文件

  • 显示远程服务器公共主机密钥的asci-art(要在客户端完成,您通过ssh从FROM连接的密钥):

    ssh -o visualhostkey=yes -o FingerprintHash=md5 <host_server_to_connect>
    

    -o :选项

    visualhostkey :视觉(ascii艺术作品)

    FingerprintHash :要使用的哈希算法

如何检查主机/服务器的真实性

首先,1.将在服务器上本地完成(您要通过ssh连接到TO的服务器):它将为您提供第一本ascii-art。打印或拍照。

第二,在第一个SSH连接中完成;它将显示第二种ascii艺术。如果ascii技术相同,那么您可以对“我信任吗?” 问题(即Are you sure you want to continue connecting (yes/no))回答

示例

  • 服务器端
$ ssh-keygen -l -v -f /etc/ssh/ssh_host_ecdsa_key.pub
256 2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6   (ECDSA)
+--[ECDSA  256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+-----------------+
  • 客户端
$ ssh -o visualhostkey=yes -o FingerprintHash=md5 192.168.12.211
The authenticity of host '192.168.12.211 (192.168.12.211)' can't be established.
ECDSA key fingerprint is MD5:2e:a6:b3:27:14:12:0b:79:df:9a:7f:bd:4d:b1:e0:b6.
+---[ECDSA 256]---+
| .               |
|o o              |
| o + .           |
|  o o .          |
|   . +  S . .    |
|    +  . . . o   |
|   . .o ..o o    |
|    ooo....+     |
|    o= .  E..    |
+------[MD5]------+
Are you sure you want to continue connecting (yes/no)? 

更多说明

第一个命令将显示与您输入的文件指纹相对应的ascii-art。您提供的输入文件是服务器的公共主机密钥。当客户端连接时(不仅是第一次),服务器将发送其公共主机密钥。将在~/.ssh/known_hosts中搜索此公共主机密钥。如果公用密钥在文件中,则可以:主机(服务器)已知,因此我们继续下一步以验证用户身份(本文中不介绍user auth)。如果公钥不在文件中,则客户端将使用哈希算法计算此公钥的指纹(不同的哈希算法将给出不同的指纹)。显示先前计算出的该指纹(如果提供了相应选项,还会显示ascii-art),您将不得不回答是或否,这取决于您识别出该指纹或否(该指纹是密码的公共主机密钥的图像/哈希)。服务器)。如果您选择是,则服务器的公钥(不是其指纹)将被添加到文件~/.ssh/known_hosts中。

我们可以注意到~/.ssh/known_hosts在您的主目录(〜)下,因为信任此主机(服务器),但是其他用户可能不信任您。另外,服务器的主机公钥也不依赖于用户,因此它存储在/etc/ssh/中。

第二个命令将显示从 host_server_to_connect 接收到的公共密钥的指纹和密码(根据选项中给出的哈希算法)。它与仅执行ssh相同,但具有更多可视选项,因此连接将以与普通ssh连接相同的方式继续。