

Then you only need the “secret zero” of an ssh key to get everything set up and syncable
I made a script just for this purpose, I run the script on a fresh system and it pulls my stow directory without me needing to manually mess with ssh keys or passwords.
On a flashdrive, I have a folder named “setup”. In that folder, I have this script called “run” and a directory called “ssh”. In that “ssh” folder (not to be confused with ~/.ssh), I put my private ssh keys and their pubs.
#!/bin/bash
# stop script immediately on error
set -e
# change working directory to directory containing this script
cd "$(dirname "$0")"
# check that ./ssh exists and exit if not
if [ ! -d ./ssh ]; then
echo "./ssh not detected, exiting..."
exit 1
fi
# create .ssh directory
[ ! -d $HOME/.ssh ] && mkdir $HOME/.ssh
chmod 700 $HOME/.ssh
# copy keys to ~/.ssh
cp -a ./.ssh/. $HOME/.ssh/
# ensure right permissions for .ssh contents
# note: 2>/dev/null suppresses errors if no .pub files exist, || true to avoid exiting on failure
chmod 600 $HOME/.ssh/*
chmod 644 $HOME/.ssh/*.pub 2>/dev/null || true
# start ssh agent
eval `ssh-agent -s`
trap "ssh-agent -k" EXIT
# add keys
ssh-add "$HOME/.ssh/privatesshkey"
# add known hosts
# note: removing them first then adding again to avoid duplicate entries
ssh-keygen -R codeberg.org 2>/dev/null || true
ssh-keygen -R github.com 2>/dev/null || true
ssh-keyscan -H codeberg.org >> $HOME/.ssh/known_hosts
ssh-keyscan -H github.com >> $HOME/.ssh/known_hosts
# clone repo
cd $HOME
if [ -d "$HOME/stow" ]; then
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
mv "$HOME/stow" "$HOME/stow.old.$TIMESTAMP"
fi
git clone ssh://git@gitprovider.domain/myusername/stow.git
I use it pretty often to keep my desktop, laptop, and server configs in sync.
To setup new systems, I created this bash script: https://lemmy.world/post/41584520/21545156
Then I would run the commands in my original post to create the symlinks.