首页 > 解决方案 > 为什么 ssh-keygen 的 -f 标志无法遵循符号链接?

问题描述

我的~/.ssh目录是一个符号链接/somewhere/else/.ssh/

现在,以下工作完美;正如预期的那样,演示密钥最终在 处创建。/somewhere/else/.ssh/Official

export NewUser="Sam"
ssh-keygen -N "" -t rsa -b 8192 -C "Login Key of ${NewUser}." -f ~/.ssh/Official/demo

但是,当-f通过变量提供相同的路径时,它会失败并出现以下错误: Saving key "~/.ssh/Official/demo" failed: No such file or directory

export NewUser="Darsh"
export SSHKey_Path="~/.ssh/Official/demo"
ssh-keygen -N "" -t rsa -b 8192 -C "Login Key of ${NewUser}." -f ${SSHKey_Path}

我尝试了几种方法来提供这个变量,但没有任何效果。我也无法在文档中找到有关变量的任何信息。我想知道为什么-f只有通过变量传递才能遵循符号链接路径?有解决方法吗?我不确定,但是,是否建议在此处注意这一点?



编辑:调试后更新问题。原始问题已保留如下

我知道ssh-keygen有一个标志-f要指定input_keyfile- 使用它,一旦可以在自定义位置创建一个具有自定义名称的键。但是,如果input_keyfile是一个变量,这将失败。
如何将密钥路径作为变量提供给 ssh-keygen?

以下是来自较大代码的过度简化的片段:
这非常有效:

export NewUser="Sam"
ssh-keygen -N "" -t rsa -b 8192 -C "Login Key of ${NewUser}." -f ~/.ssh/Official/demo

但是,这会失败并显示以下错误Saving key "~/.ssh/Official/demo" failed: No such file or directory

export NewUser="Darsh"
export SSHKey_Path="~/.ssh/Official/demo"
ssh-keygen -N "" -t rsa -b 8192 -C "Login Key of ${NewUser}." -f ${SSHKey_Path}

我尝试以多种方式包装 ${SSHKey_Path} ,但没有任何效果:
", ',$(echo ${SSHKey_Path})等等。

标签: bashsshenvironment-variableszshssh-keygen

解决方案


失败不在于变量,而在于对~.

尝试

export SSHKey_Path=~/.ssh/Official/demo

或者

export SSHKey_Path="$HOME/.ssh/Official/demo"

推荐阅读