语法:取消设置 ssh -o 配置值?

语法:取消设置 ssh -o 配置值?

在我的文件中,/etc/ssh/ssh_config我将 的值设置PKC11Provider为 PKCS11 库的路径。

但是,由于智能卡并不总是存在,我想确保非交互式 ssh 会话(如由 cron 运行的会话)不使用 PKCS11 库,而是仅在硬盘驱动器上查找密钥。

所以我需要输入这样的 ssh 命令:

$ ssh -o PKCS11Provider= server.com

然而,这是无效的:

command-line line 0: Missing argument.

如何在命令行上指定要取消设置的配置变量?我搜索了手册页和谷歌,但没有找到答案(也许只是糟糕的谷歌)。

我尝试将值放在那里no,但是当放在那里任何其他废话时,ssh只会抱怨找不到动态库。那么它可以工作,但它会发出此错误,我觉得这不是正确的方法。

感谢您的想法。

答案1

编辑2020:现在(使用 OpenSSH 8.1p1),有一个关键字none,它应该允许您取消之前设置的PKCS11Provider配置选项值。

无法通过内部配置读取的方式取消设置配置值ssh

你应该反过来想一下。在哪里设置这个值?你应该在 中执行此操作~/.ssh/config

如果您仅将智能卡用于特定主机,则应将此选项放入该Match host块中。

您在您的用户下运行 cron 脚本吗?您可以使用Match execblock 来检查是否运行交互式会话或从 cron 运行。或者您甚至可以编写一些脚本来检查购物车是否存在(再次使用Match exec)。如果您使用不同的用户运行它,请给他不带此选项的配置文件(在他的主目录中)。

或者您可以简单地提供不同的ssh_configcron 脚本ssh(使用-F开关),在这种情况下您不会设置此选项。这种方式有很多可能性。如果您特别感兴趣,我可以添加更多详细信息。

答案2

如果您的 PKCS11 库在不存在令牌/智能卡的情况下不报告没有密钥,那么对我来说听起来很危险。

FWIW,在 openssh 6.6.1 上,

ssh -o IdentitiesOnly=yes

不会尝试使用从 PKCS11 库获取的密钥进行身份验证,但它似乎确实尝试读取它们,并且

ssh -I /dev/null

抱怨dlopen /dev/null failed: /dev/null: file too short但继续要求我进行交互式登录(因为我没有合适的密钥对,但-vv向我表明仍然提供本地密钥对)。

相关内容