检查 known_hosts 中自定义端口下是否存在主机名

dei*_*mos 7 ssh hostname ssh-keygen

我需要添加一个检查,如果主机名已经存在于 known_hosts 中。

通常我会做这样的事情:

ssh-keygen -H -F hostname
Run Code Online (Sandbox Code Playgroud)

但是,在这种特殊情况下,这似乎对我不起作用。我使用端口 2202 连接到主机,如下所示:

ssh user@myhost -p 2102
Run Code Online (Sandbox Code Playgroud)

我要求将主机名添加到 known_hosts,我说是。之后我运行“ssh-keygen -H -F myhost”但收到空结果。更糟糕的是,known_hosts 被散列。

这与端口 22 完美配合,因此如果我登录到“ssh user@myotherhost”,保存已知主机并运行“ssh-keygen -H -F myotherhost”,我会收到文件中的确切行。

那么,如何调整命令以使用端口 2102?

Jak*_*uje 9

您可以使用以下格式:[hostname]:2121,因为它存储在known_hosts文件中(注意,您需要使用方括号!):

ssh-keygen -H -F "[hostname]:2121"
Run Code Online (Sandbox Code Playgroud)

概念证明(我的最小测试用例的成绩单):

$ echo "[hostname]:2121 ssh-rsa AAA...==" > known_hosts
$ ssh-keygen -Hf known_hosts 
known_hosts updated.
Original contents retained as known_hosts.old
WARNING: known_hosts.old contains unhashed entries
Delete this file to ensure privacy of hostnames
$ ssh-keygen -H -F "[hostname]:2121" -f known_hosts
|1|R21497dX9jN052A92GSoVFbuTPM=|lRtIr6O564EaFG0SsIulNAWpcrM= ssh-rsa AAA...==
Run Code Online (Sandbox Code Playgroud)

您可能需要使用 IP 地址而不是主机名,但它通常应该可以工作。