linux - 不需要验证 ssh 公钥的 bash 脚本
问题描述
我想从我的 bash 脚本 ssh 到一个 ip,如果它要求我将公钥添加到 known_hosts 文件,我想打印一条消息并退出脚本。另外,我不想检查我的 known_hosts 文件,因为我使用的是 IDM,所以密钥不会在 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
要求这些东西ssh -o BatchMode=yes yourhost
然后你会发现——你已经可以从你的输出中看到——这grep
不适用于错误消息(参见这篇文章)。
如果要检查是否成功登录,可以考虑执行以下操作:
if ssh -o BatchMode=yes your.host.name true
then
echo "Successful login"
fi
如果您特别想检查主机密钥验证:
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
确保无论用户当前的语言设置如何,您都会获得默认的英语错误消息。
推荐阅读
- javascript - JavaScript Discord Bot 没有响应
- wordpress - 有什么方法可以从 fb shop / catalogue 导出产品数据?
- reactjs - 如何在本机中动态导入图像?
- android - 如何为具有上下文、标题和消息的函数编写本地单元测试用例?
- python - 使用 Sqlalchemy 在多个外键上创建连接
- json - 如何从源代码中隐藏 Shopify 产品 #tags + #collections?这会影响#smartcollections 和/或#analytics #retargeting
- unity3d - Unity 在特定时刻启动音频
- .net-core - 验证没有公钥 (RSA) 的 JWT .net 核心 webapi
- android - 在 Android 中访问文件已更改
- python - Plotly Heatmap:如何使用 y 作为字符串?