how to move ssh-key related files to another directory?

257 Views Asked by At

i've been trying to clean up my root directory so that it isn't clustered with random dotfiles. nonetheless, on setting up the ssh-key i came to a dead-end, where i wouldn't find a way to migrate known_hosts file to the other direction ($XDG_CONFIG_HOME/ssh/config).

i used this command to generate my ssh-key:

mkdir -p $XDG_CONFIG_HOME/ssh
ssh-keygen -t ed25519 -C "[email protected]" -f $XDG_CONFIG_HOME/ssh/id_ed25519

but yet i need to create a ~/.ssh/config file to point at my $XDG_CONFIG_HOME/ssh/config file, which is frustrating because i want to get rid of the ~/.ssh directory

i used several approaches one of them was to set an env var SSH_CONFIG to $XDG_CONFIG_HOME/ssh/config but that didn't work either

⚠️ i'm using macOS and fish shell to prevent confusion

this is the $XDG_CONFIG_HOME/ssh/ directory structure:

config
id_ed25519
id_ed25519.pub
known_hosts #this file is ignored as ssh expects its in ~/.ssh/

this is the $XDG_CONFIG_HOME/ssh/config file:

GlobalKnownHostsFile $XDG_CONFIG_HOME/ssh/known_hosts #this doesn't help either 
Host github.com
  AddKeysToAgent yes
  UseKeychain yes
  IdentityFile $XDG_CONFIG_HOME/ssh/id_ed25519

and the current fix that is working, is only creating a .ssh/config with the value UserKnownHostsFile $XDG_CONFIG_HOME/ssh/known_hosts, which makes my whole migration of the files pointless.

.ssh/config file:

UserKnownHostsFile $XDG_CONFIG_HOME/ssh/known_hosts

is there something that i'm missing?

how can i fix this?

or is there a better way of organising one selfs root folder?

i tried to set the env var SSH_CONFIG but it seems to ignore it:

set -Ux SSH_CONFIG ~/.config/ssh/config #fish syntax, it's the same as: export SSH_CONFIG="$HOME/.config/ssh/config"
1

There are 1 best solutions below

0
faho On BEST ANSWER

OpenSSH has no support for $XDG_CONFIG_HOME. This has been asked for years ago and rejected.

Unfortunately the bug tracker is now login-only, so here's an archive link: https://web.archive.org/web/20190925004614/https://bugzilla.mindrot.org/show_bug.cgi?id=2050

And here's the maintainer's justification:

No.

OpenSSH (and it's ancestor ssh-1.x) have a 17 year history of using ~/.ssh. This location is baked into innumerable users' brains, millions of happily working configurations and countless tools.

Changing the location of our configuration would require a very strong justification and following a trend of desktop applications (of which OpenSSH is not) is not sufficient.

So you'll either have to make a symlink or alias all ssh tools to read a different config file. Unfortunately, if you give -F /path/to/config:

If a configuration file is given on the command line, the system-wide configuration file (/etc/ssh/ssh_config) will be ignored

So this isn't a great idea either. My advice is to simply live with the directory.