How do you guys quickly sync your settings (especially bash aliases and ssh keys) across your machines?

Ideally i want a simple script to run on every new server I work with. Any suggestions?

  • dinckel
    link
    fedilink
    12 years ago

    1password does this for me, when it comes to ssh keys, and it’s great. All I have to do on a new machine is setup the ssh-agent, which is also practically preconfigured. The actual key never leaves the password manager

  • @[email protected]
    link
    fedilink
    82 years ago

    Syncthing. If you want flatpak, syncthingy.

    Its simply best, does all the annoying background things like webUI, machines, versioning, verifying etc. If you disable global discovery you can use it tough LAN only

    • mFatOP
      link
      fedilink
      English
      22 years ago

      I like this approach. Had never heard of those solutions. Thanks!

    • macallik
      link
      fedilink
      1
      edit-2
      2 years ago

      That my solution. I have a ‘Sync’ folder on every device’s Home folder, and then I use some aliases to determine whether to grab the bash_aliases file or replace it:

      • alias dba=‘diff -s ~/.bash_aliases ~/Sync/.bash_aliases’ # compare files
      • alias s2ba=‘cp ~/Sync/.bash_aliases ~/’ # Push from Sync folder to current bash aliases
      • alias ba2s=‘cp ~/.bash_aliases ~/Sync/’ # Push from current bash aliases to Sync folder

      By far, the diff alias is the most used. It allows for a quick check on what is different between files w/o having to open them up

  • S410
    link
    fedilink
    9
    edit-2
    2 years ago

    On my devices like PCs, laptops or phones, syncthing syncs all my .rc files, configs, keys, etc.

    For things like servers, routers, etc. I rely on OpenSSH’s ability to send over environmental variables to send my aliases and functions.
    On the remote I have
    [ -n "$SSH_CONNECTION" ] && eval "$(echo "$LC_RC" | { { base64 -d || openssl base64 -d; } | gzip -d; } 2>/dev/null)"
    in whatever is loaded when I connect (.bashrc, usually)
    On the local machine
    alias ssh="$([ -z "$SSH_CONNECTION" ] && echo 'LC_RC=$(gzip < ~/.rc | base64 -w 0)') ssh'

    That’s not the best way to do that by any means (it doesn’t work with dropbear, for example), but for cases like that I have other non-generic, one-off solutions.

  • @[email protected]
    link
    fedilink
    English
    6
    edit-2
    2 years ago

    I use a git repo combined with the basic install utility. Clone the repo, run the app installer, then run the install script. For symlinks I just use a zsh script.

    • mFatOP
      link
      fedilink
      English
      12 years ago

      Thanks that’s a good idea.

    • @[email protected]
      link
      fedilink
      32 years ago

      I love this solution, I’ve been using it for years. I had previously just been using the home directory is a git repo approach, and it never quite felt natural to me and came with quite a few annoyances. Adding stow to the mix was exactly what I needed.

    • @[email protected]
      link
      fedilink
      12 years ago

      Ditto – I’ve been keeping a central to me git repo for my settings for years. Any new machine I’m on ‘git clone ; ./settings/setup.sh’, then my pull’d .profile does a git pull on login.

  • Baron Von J
    link
    fedilink
    432 years ago

    I suggest you don’t sync SSH keys. That’s just increasing the blast radius of any one of those machines being compromised.

    • @[email protected]
      link
      fedilink
      English
      102 years ago

      Exactly this. Don’t move private keys between machines. Generate them where you need them, it’s not like they cost anything

    • @[email protected]
      link
      fedilink
      32 years ago

      Right. Use some kind of centralized authentication like freeipa.

      For bash aliases, I just pull down a .bashrc from github gists.

      • PHLAK
        link
        fedilink
        English
        112 years ago

        OP should just generate a unique SSH key per device (+ user).

        • Muddybulldog
          link
          fedilink
          English
          42 years ago

          Agreed. I’ve probably got 100 keys registered with GitHub and 98 of them the private key is long destroyed due to OS reinstalls or whatnot. Format machine, new key. New machine, new key.

          • PHLAK
            link
            fedilink
            English
            12 years ago

            FYI: You can remove the old keys from GitHub.

        • @[email protected]
          link
          fedilink
          22 years ago

          I d rather have 2 to 3 (for critical, mid, and test systems) ssh keys that are regularly rotated than 1 key per machine. I m not gonna balance 50 ssh keys; neither enter my password every time i jump hosts.

      • mFatOP
        link
        fedilink
        English
        22 years ago

        Is the url is easy to rember?

      • Baron Von J
        link
        fedilink
        42 years ago

        Fair point, but I would equate that with syncing the authorized_keys file rather than thinking about how to sync the keys.

  • @[email protected]
    link
    fedilink
    22 years ago

    My solution is not ideal:

    I created a directory, called ~/config_sync. I create sym links for config files, like ~/.bashtc to ~/config_sync/bashrc

    However, I need to record the sym links I’ve created, and repeat this process on new machines

    • @[email protected]
      link
      fedilink
      22 years ago

      Look into using GNU stow! It’s exactly what you’re doing but it creates the symlinks for you.

  • @[email protected]
    link
    fedilink
    42 years ago

    I keep my dotfiles in a got repo and just do a git pull your update them. That could definitely be a cron job if you needed.

    SSH keys are a little trickier. I’d like to tell you I have a unique key for each of my desktop machines since that would be best practice, but that’s not the case. Instead I have a Syncthing shared folder. When I get around to cleaning that up, I’ll probably do just that and keep an authorize_keys and known_hosts file in git so I can pull them to needed hosts and a cron job to keep them updated.

  • Coelacanthus
    link
    fedilink
    22 years ago

    Use a git repo and stow tool. For updating, you only need run git pull (and stow if you create config for a new software). If you modify some config, just git add && git commit && git push.
    With this way, you can also record change history of your config.