【问题标题】:Bash: SSH: Checking if an IP or host with non standard port is in known_hostsBash:SSH:检查具有非标准端口的 IP 或主机是否在 known_hosts
【发布时间】:2020-12-13 13:56:42
【问题描述】:

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

我正在使用this question/answer 中建议的测试,并且我确定此测试中的 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:
#

有什么想法吗?

【问题讨论】:

    标签: bash if-statement networking ssh known-hosts


    【解决方案1】:

    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 似乎期望命令行上的格式与文件中使用的格式相同。

    【讨论】:

    • 快速跟进。我无法使用变量来解决这个问题。例如,此代码返回空:ssh-keygen -F '[${remoteHost}]:${remotePort}'remoteHost="192.168.1.10"remotePort="1234"。有什么想法吗?
    • @nooblag Shell 变量在单引号内展开。使用双引号:ssh-keygen -F "[${remoteHost}]:${remotePort}"
    • 啊,太好了!谢谢@John1024!
    猜你喜欢
    • 2020-01-01
    • 1970-01-01
    • 2012-02-16
    • 2023-04-06
    • 2020-09-20
    • 2020-08-19
    • 2020-07-12
    • 2020-04-09
    • 1970-01-01
    相关资源
    最近更新 更多