Bash:SSH:检查具有非标准端口的 IP 或主机是否在known_hosts中

noo*_*lag 2 ssh bash networking if-statement known-hosts

我正在尝试测试之前是否已在 bash 脚本中连接过 SSH 主机。它使用非标准端口。

我正在使用此问题/答案中建议的测试,并且我确定此测试中的 SSH 主机位于known_hosts 中,但测试似乎未按预期工作。

是否无法使用 测试 IP 地址ssh-keygen -F?或者这是使用非标准端口的问题(因为检查some.host.com:4567在这里也不起作用)...

#!/bin/bash

# test for IP address
if ssh-keygen -F '192.168.1.10:1234'; then
    echo "Yes, a known host."
fi

## Expected Output:
#
## Host 192.168.1.10 found: line 6
#|1|hashblahblahblah
#Yes, a known host.
#
## Actual Output:
#
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Joh*_*024 5

ssh-keygen主机/IP 周围需要方括号。因此,替换:

ssh-keygen -F '192.168.1.10:1234'
Run Code Online (Sandbox Code Playgroud)

和:

ssh-keygen -F '[192.168.1.10]:1234'
Run Code Online (Sandbox Code Playgroud)

您可以通过查看来检查这一点~/.ssh/known_hosts。每行的“标记”之后的第一项(如果有)是一个以逗号分隔的主机列表(如果是非标准,则带有端口)。 ssh-keygen -F似乎期望命令行上的格式与文件中使用的格式相同。