SSH 配置中的当前目录

SSH 配置中的当前目录

我有一个包含所有文件和 SSH 配置的项目id_rsa,其中包含如下条目:

Host projectname-server-1
  User root
  Hostname 26.139.18.47
  IdentityFile ./certificates/server-1/id_rsa

这个想法是,用户可以从他们的主要 SSH 配置文件中包含此配置,如下所示:

Include /home/myname/path-to-project/ssh-config

然后只需运行ssh projectname-server-1即可连接到服务器。

问题是这仅当我在目录中时才有效/home/myname/path-to-project

有没有办法指定相对于配置文件位置的路径?

答案1

我不相信存在这样的“当前目录”变量。

ssh_config(5) - Linux 手册页 列出了可能有帮助的语法:

文件名可以使用波浪号语法来指代用户的主目录或以下转义字符之一:(%d本地用户的主目录)、%u(本地用户名)、%l(本地主机名)、%h(远程主机名)或%r(远程用户名)。

答案2

听起来你想要的是一种将ssh项目的所有配置和变量存储在项目目录中的方法,以及相对于包括ssh 配置文件,而不是当前路径。

简短的回答是- 据我所知,ssh_config包含的行为类似于C #include- 您可以将它们视为将引用的文件扩展到当前文件中。

话虽如此,你还是可以通过一些可扩展的方式,以一定程度的惯例来实现这一点——我个人对很多ssh配置都进行了版本控制,我最好的建议是这样的:

在项目根目录下,将配置ssh存储在一个目录下

my_project/
├── _config.yml
├── _ssh_config
│   └── server-1
│       ├── id_rsa
│       └── server-1.config
└── src

3 directories, 3 files

server-1.config这样写:

Host projectname-server-1
  User root
  Hostname server-1.example.com
  # Our identity file is found in folder under ~/.ssh
  IdentityFile ~/.ssh/config.d/server-1/id_rsa

~/.ssh/在新建文件夹下,config.d

mkdir -p ~/.ssh/config.d

要引用项目特定的 ssh 文件,你可以将你的文件符号链接my_project/_ssh_config/server-1config.d

ln -s path/to/my_project/_ssh_config/server-1 ~/.ssh/config.d/server-1

更新您的Include指令~/.ssh/config

# Relative "Include" paths are assumed to be relative to ~/.ssh/
Include config.d/server-1/server-1.config

现在,你~/.ssh看起来是这样的:

.ssh/
├── config
└── config.d
    └── server-1 -> /path/to/my_project/_ssh_config/server-1/
        ├── id_rsa
        └── server-1.config

2 directories, 3 files

这种方法的好处是,您可以轻松地将其扩展到server-2、3、4 等,或其他项目。只需符号链接path/to/server-xconfig.d,您就可以在用户级使用 glob 来Include处理它:

Include config.d/**/*.config

我认为将ssh密钥存储在项目中听起来很不合常规,可能很危险,而且不是特别有用。如果您的目标是配置的可移植性,我建议对私钥的路径进行例外处理。

相关内容