测试公钥认证的bash/ssh

12

有没有一种程序化的方法可以测试ssh是否可以使用公钥进行身份验证?我想做这样的事情(最好是在bash中,但也可以考虑Python解决方案):

ssh-test-thingy user@host || echo "could not authenticate using publickey"

ssh-test-thingy 在远程主机上找不到匹配的公钥时,会返回非零的退出状态。

1个回答

18

我会传递选项-o BatchMode=yes到ssh命令中,看看是否起作用。这将禁用提示输入密码,我认为在实践中相当于您想知道是否可以通过密钥进行身份验证。 ssh-test-thingy可以像以下示例一样编写为bash脚本:

exec ssh -o BatchMode=yes "$@" true

这将简单地传递用户@主机(和任何其他参数),并尝试在远程主机上运行true,如果成功则立即返回成功状态代码(0)。


1
我不得不在命令的末尾加上“true”才能使其工作,例如:ssh -o BatchMode=yes“$@”true - Joseph Lisee
1
添加“-q”可以使其静音。 - javs
exec的目的是什么? - pihentagy
@pihentagy: exec 用 ssh 进程替换当前 shell 进程。这是可以的,因为在启动 ssh 后不再需要 shell;程序的返回值应该是 ssh 的返回值。你可以在没有 exec 的情况下返回 ssh 的返回值,但是为什么要多生成一个无用的进程呢? - John Zwinck
如果你要将它放在一个函数中,你需要移除 "exec" 部分。我这样写是为了让它成为一个完整的脚本,而不是一个函数。 - John Zwinck
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接