如何使用从文件读取的路径读取 ssh 密钥文件的内容?

如何使用从文件读取的路径读取 ssh 密钥文件的内容?

我需要使用驻留在文件中的给定路径读取 ssh 密钥的内容,如下所示:我的 ssh 私钥是:~/.ssh/firstname.lastname

当我cat ~/.ssh/firstname.lastname在 ubuntu 上调用终端时,我得到了预期的结果。但是,如果我从任何文本文件中获取 ssh 密钥的路径,那么我会得到cat: '~/.ssh/firstname.lastname': No such file or directory.

例如,我有path_to_key.txt包含单行的文件~/.ssh/firstname.lastname

因此,在终端中调用cat $(cat path_to_key.txt)会返回上面提到的错误消息。

所有文件都驻留在同一目录下,并且调用也从该目录发生。

为什么我不能这样“猫”?

答案1

这些猫都工作了,但波形符 ( ~) 没有像通常在命令行上那样进行处理。内部cat返回文件的内容,但外部cat已经处理了波浪号扩展、通配符、变量扩展等。因此,外部猫通过文字的名称~/.ssh/firstname.lastname而不是预期的/path/to/your/home/.ssh/firstname.lastname.

两种解决方案:

  1. 包含文件的绝对路径:而不是包含 的 path_to_key.txt ~/.ssh/firstname.lastname,它将包含(例如)/home/you/.ssh/firstname.lastname
  2. 将外部包裹起来cateval以便生成的命令(发生命令替换后)为再加工的: eval cat $(cat path_to_key.txt)。请注意,这会带来额外的评估层,因此该密钥文件内的任何重定向或后续命令都会被执行 - 当然,还有您想要的波形符扩展。

相关内容