我看到在ssh_配置手册页和打开ssh我应该能够使用的网站%n 令牌查找给定主机条目的身份文件时。
OpenSSH 的 ssh(1) 和 sshd(8) 使用的percent_expand 令牌
GitHub 允许使用 ssh 令牌作为部署令牌,但阻止您在多个存储库上多次使用令牌。因此,我想使用通配符来创建单个配置文件,无论我必须创建多少个单独的项目密钥:
host github-*
Hostname github.com
User git
IdentityFile %d/.ssh/github/%n
IdentitiesOnly yes
然后我在该目录下放了一个 github-MyPackage 公私钥对~/.ssh/github/
。
它找到通配的配置文件并且 %d 工作正常,但如果我尝试使用 %n 进行 git 克隆以从原始命令行指定的主机别名中查找身份文件名:
> git clone github-MyPackage:/myorganization/MyPackage.git
Cloning into 'MyPackage'...
percent_expand: unknown key %n
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
这不仅仅是 git 访问它的方式,因为仅使用一个简单的 ssh 命令它也会失败:
> ssh github-MyPackage
percent_expand: unknown key %n
我尝试用谷歌搜索,但在 %n 上没有找到任何内容。这是没有完全实施还是我做错了什么?
答案1
可能你的 ssh 版本太旧,你可以检查一下ssh -V
。
OpenSSH_7.9p1%n
仅支持某些关键字(来自本地安装的手册页):
匹配执行 控制路径 本地命令 远程命令
我无法判断哪个特定版本将此令牌添加到IdentityFile
,但它可以与 OpenSSH_8.9p1 一起使用以获取更多关键字:
证书文件 控制路径 身份代理 身份文件 本地转发 匹配执行 远程命令 远程转发 用户已知主机文件 代理命令