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

标签 bash if-statement networking ssh known-hosts

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

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

是否无法使用 ssh-keygen -F 测试 IP 地址?或者这是使用非标准端口的问题(因为检查 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:
#

有什么想法吗?

最佳答案

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

ssh-keygen -F '192.168.1.10:1234'

与:

ssh-keygen -F '[192.168.1.10]:1234'

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

关于Bash:SSH:检查具有非标准端口的 IP 或主机是否在known_hosts中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63569293/

相关文章:

bash - `echo . `( echo 点)是什么意思?

bash - 需要帮助修改 Shell 脚本以更改 CentOS 上的 ip 地址

html - 如何使用 if 语句在 SCSS 中查找类名?

http - 连接将在 Http/2 中保持多长时间

Python 3 套接字编程 : using sendall vs. sendto

java - 我们可以使用脚本语言检查队列深度吗?

python - 运行 python 脚本时,-S -cwd -r -j -l 是什么意思?

javascript - 字符串等于字符串控制流

java - 如何检查 ArrayList<String> 中的项目是否不包含某个单词?

Java NIO SocketChannel写法问题