在我的文件中,/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 exec
block 来检查是否运行交互式会话或从 cron 运行。或者您甚至可以编写一些脚本来检查购物车是否存在(再次使用Match exec
)。如果您使用不同的用户运行它,请给他不带此选项的配置文件(在他的主目录中)。
或者您可以简单地提供不同的ssh_config
cron 脚本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
向我表明仍然提供本地密钥对)。