gpt4 book ai didi

validation - 无人值守测试 ssh(公钥/私钥)连接的可靠方法

转载 作者:行者123 更新时间:2023-12-02 14:29:19 24 4
gpt4 key购买 nike

我想以自动方式基于 ssh 公钥/私钥验证进行测试通过/失败。

我知道我可以使用这样的东西:

ssh -T git@github.com

这将给出一个结果,例如:
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

显然,这是一条自定义消息,并且会因不同的服务而改变。

我曾希望这会返回成功状态,但是当我在 node.js 中使用以下代码段时:
const { exec }  = require('child_process');

exec('ssh -T git@github.com', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
} else {
console.log('success');
}
});

结果是在错误情况下:
exec error: Error: Command failed: ssh -T git@github.com
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

这是因为在这些情况下,退出代码由 Remote 确定,而 github 给出的退出状态为 1。然而,我注意到 bitbucket 给出的退出代码为 0,我认为在这种情况下更合适。

我还注意到,如果我使用了我尚未在我的 ssh 配置中设置的无效内容。例如: sst -T git@test.github.com它只会导致我的测试最终超时。我可以将此视为失败,但如果有更标准/可靠的方法可以在无人值守的测试中检测到这一点,我只是好奇。

我查看了 ssh 的手册页,我可以为请求设置超时,例如:
ssh -T -o ConnectTimeout=1 git@github.org

我也可以使用 echo $?检查退出代码并发现如果它无法通过身份验证(如果我没有公钥/私钥设置)或者如果它超时,我会得到一个退出代码 255。这仍然不是防弹的,因为它看起来像如果出于任何任意原因,服务器也可以发送它。

身份验证失败的典型错误消息类似于:
git@github.com: Permission denied (publickey).

我认为这可能是一个更标准的错误消息......但内容也可以改变 (a custom banner for example).

最佳答案

身份验证失败的错误消息是 ssh 客户端消息。您可以在 https://github.com/openssh/openssh-portable/blob/master/sshconnect2.c 查看源代码

        Authmethod *method = authmethod_get(authlist);
if (method == NULL)
fatal("%s@%s: Permission denied (%s).",
authctxt->server_user, authctxt->host, authlist);

只要您保持相同的本地 ssh 客户端,这部分将是稳定的。您可以将其用作身份验证失败的指标。

关于validation - 无人值守测试 ssh(公钥/私钥)连接的可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54116794/

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