My ssh keys are oldMany times I had the Idea to replace them and cleanup. Put the approach feels old not intuitive and i’m affraid of problems.

How do you manage keys and get sure they do ot get to old.

    • cmnybo@discuss.tchncs.de
      link
      fedilink
      English
      arrow-up
      2
      ·
      12 hours ago

      So what happens when the certificate expires? Do you get locked out if you don’t have physical access?

      • non_burglar@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        11 hours ago

        Re-gen the keys. In this environment, you would have PKI setup and automation to handle cert renewal.

        Having the certs expire is an advantage, security-wise. Auth will expire with certs, stolen creds can be instantly invalidated.

  • solrize@lemmy.ml
    link
    fedilink
    English
    arrow-up
    12
    ·
    14 hours ago

    Do you think they are compromised? Generally you have to invalidate the public keys in any .ssh_hosts file that accepts them, and create new ones instead. I generally install .ssh_hosts on remote machines using an ansible playbook. I don’t have any automation to cycle them but I guess I would also do that with ansible if I thought it were needed.

    Ansible may be old school by now, but it works for me. Maybe the cool kids are using something newer now. I want to look into nix or guix one of these days.

    • ratatouille@feddit.orgOP
      link
      fedilink
      English
      arrow-up
      1
      ·
      6 hours ago

      Not compromised. But my key is around 20 years old. I’m a family admin and support my family since then with Linux and some selfhostung services.

      Meanwhile I need an identity provider or something else and in any case ssh feels like a more of a pain to manage.

      • solrize@lemmy.ml
        link
        fedilink
        English
        arrow-up
        1
        ·
        edit-2
        5 hours ago

        Are you running a planet-wide server farm from your 20 year old key or what? Just a few machines? If you want to regenerate your key and fix the knownhosts files and it’s not too much hassle, then go ahead and do it. Do something else later if you want something fancier. Yes there are some hardware key encaapsulation approaches possible, some people like to use jump hosts as gateways (the remote hosts firewall block access to anything but the jump host) etc. Also people rely in part on virtual LAN security in their data centers or ISP’s.

        If it’s just a few personal machines you’re probably overthinking this. I just don’t store secret keys on any remote machines, but use ssh-keygen on my laptop and ssh -A from there.

    • 4am@lemmy.zip
      link
      fedilink
      English
      arrow-up
      3
      ·
      12 hours ago

      nix for local machine config, Terraform for VM wrangling, and Ansible to orchestrate it all

  • notabot@piefed.social
    link
    fedilink
    English
    arrow-up
    4
    ·
    14 hours ago

    The general process would look something like:

    1. Find all of the SSH keys you want to replace.
    2. For each of thise keys, identify everywhere you use it to authenticate, and write this down! This list will form the basis of the rest of the plan. Make sure you list all of the accounts/servers you log in to, and don’t forget things like github or other external systems if you use them.

    You’ll need to perform the following steps for each SSH key you are replacing:

    1. Rename the public and private keys to something like old_id_rsa and old_id_rsa.pub (obviously use the same type name as your key, just prefix old_)
    2. In your ~/.ssh/config, add a line telling SSH to use the old key as well as the new ones: IdentityFile ~/.ssh/old_id_rsa (change the key filename as aporopriate)
    3. Check you can still log in to the servers you could log in to before. It should still be using the old key, just with a different filename, so it should still work.
    4. Generate your new SSH keys ssh-keygen -t ed25519
    5. Log in to each server and ADD the new ~/.ssh/id_ed25519.pub key to the authorized_keys file or equivalent mechanism. Do not remove the old public key yet.
    6. Remove the IdentityFile line from your ~/.ssh/config
    7. Check you can log in to all your systems. This will validate that your new key is working.
    8. Remove your old public key from the authorized_keys file on each server you log in to.

    Depending on your threat model you’re going to want to do this more or less often, and so you may want to consider automating it with sonething like ansible if it’ll be a regular job.

  • just_another_person@lemmy.world
    link
    fedilink
    English
    arrow-up
    2
    arrow-down
    1
    ·
    14 hours ago

    This generally referred to as Key Rotation. It applies to everything from SSH keys, to API keys in running apps.

    There are automated ways to do this with ease, but it’s very simple to do with a single script, and some sort of secure key/value store (bitwarden, Vault, etcd…whatever).

    The process is basically something like:

    1. Create a script that runs on cron to check for a key at your k/v store at an expected location, like /ssh_keys/host1-private-12.1.25 and /ssh_keys/host1-public-12.1.25
    2. Deploy this script to all machines you wish to regularly rotate keys on and ensure running properly
    3. Generate new keys and put them in your k/v store at some versioned location/path like /ssh_keys/host1-private-12.21.25 and /ssh_keys/host1-pub-12.21.25
    4. Update your local script that regularly grabs these updated keys to point to the new version uploaded, bonus if your store can symlinkto some other locations like /ssh_keys/host1-private-current
    5. Wait X period of time to ensure all hosts get whatever key they need

    Your script can clear the old keys if needed but simply validating them in the access change serves the same effect. Up to you.