gpt4 book ai didi

linux - 用于验证 ssh 公钥的 bash 脚本未被请求

转载 作者:太空宇宙 更新时间:2023-11-04 11:45:24 25 4
gpt4 key购买 nike

我想从我的 bash 脚本 ssh 到一个 ip,如果它要求我将公钥添加到 known_hosts 文件,我想打印一条消息并退出脚本。另外,我不想检查我的 known_hosts 文件,因为我使用的是 IDM,所以 key 不会在 known_hosts 中。我尝试将此作为快速测试,但似乎 ssh 接管了,因为它不包括输入:

    #!/bin/bash

if ssh localhost | grep -q 'authenticity'; then
echo "matched"
fi

这是我目前得到的输出:

[root@host ~]# sh test.sh
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:Nw91ZidjeQLA2/pEGoLpk1lRxk22arS9/xQNTU6gck8.
ECDSA key fingerprint is MD5:d7:f0:66:9c:93:2b:2d:64:34:06:ad:c4:1d:8c:c2:a2.
Are you sure you want to continue connecting (yes/no)?

我想要的是如果发生这种情况是对上面的回答“否”,打印“ssh key problem”并退出脚本。如果那不可能,也许我可以对上面的问题回答是,然后让脚本检查 known_hosts 并检查是否存在错误?

最佳答案

您可以通过 ssh -o BatchMode=yes yourhost 避免 ssh 请求这些东西

然后你会发现——你已经可以从你的输出中看到——grep 不适用于错误消息(参见 this post 关于它)。

如果要检查是否登录成功,可以考虑做:

if ssh -o BatchMode=yes your.host.name true
then
echo "Successful login"
fi

如果您特别想检查主机 key 验证:

if LC_ALL=C ssh -o BatchMode=yes your.host.name true 2>&1 | grep -q "Host key verification failed"
then
echo "Invalid host key"
fi

2>&1 确保您对错误消息进行 grep,而 LC_ALL=C 确保您获得默认的英语错误消息,而不管用户当前的语言设置如何。

关于linux - 用于验证 ssh 公钥的 bash 脚本未被请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57931952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com