automate/010_generate-ssh.sh_refacto...

105 lines
2.8 KiB
Bash

#!/usr/bin/env bash
HOME=${1:-/etc/skel}
LOCAL_USER_EMAIL=cyteen@ring-zero.co.uk
KEY_SCRIPTS_DIR="/tmp/gen_ssh_keys"
mkdir -p "${KEY_SCRIPTS_DIR}"
# Define an array of SSH key names
ssh_keys=("id_rsa" "devuan_rsa" "debian_rsa" "github_rsa" "gitlab_rsa" "gitea_rsa")
# conf_print_resolvconf() {
# cat <<-EOF
# EOF
# }
# conf_print_hostname | sudo tee $strapdir/etc/resolvconf >/dev/null
# Configure ohmyzsh to look for specific keys dynamically
cat <<-FOE | tee "${KEY_SCRIPTS_DIR}"/set-zstyle.sh >/dev/null
#!/bin/bash
cat <<-EOF | tee -a "${HOME}"/.zshrc.pre-plugins.d/001_ssh-agent >/dev/null
zstyle :omz:plugins:ssh-agent identities $(printf "%s " "${ssh_keys[@]}")
EOF
FOE
# Generate SSH keys script
cat <<-EOF | tee "${KEY_SCRIPTS_DIR}"/generate-ssh-key.sh >/dev/null
#!/bin/bash
LOCAL_USER_EMAIL=${LOCAL_USER_EMAIL}
HOME=${HOME}
for key in ${ssh_keys[@]}; do
ssh-keygen -t rsa -b 4096 -N '' -C "\$LOCAL_USER_EMAIL" -f "\$HOME/.ssh/\$key"
done
EOF
# Add keys to ssh-agent script
cat <<-EOF | tee "${KEY_SCRIPTS_DIR}"/ssh-key-add.sh >/dev/null
#!/bin/bash
HOME=${HOME}
eval "\$(ssh-agent -s)"
for key in ${ssh_keys[@]}; do
ssh-add "\$HOME/.ssh/\$key"
done
EOF
# Set permissions for SSH keys and directories script
cat <<-EOF | tee "${KEY_SCRIPTS_DIR}"/ssh-key-permissions.sh >/dev/null
#!/bin/bash
HOME=${HOME}
chmod 700 "\$HOME/.ssh"
chmod 644 "\$HOME/.ssh/authorized_keys"
chmod 644 "\$HOME/.ssh/known_hosts"
chmod 644 "\$HOME/.ssh/config"
for key in ${ssh_keys[@]}; do
chmod 600 "\$HOME/.ssh/\$key"
chmod 644 "\$HOME/.ssh/\${key}.pub"
done
EOF
# Configure preferred keys for each host script
cat <<-EOF | tee "${KEY_SCRIPTS_DIR}"/ssh-config.sh >/dev/null
#!/bin/bash
HOME=${HOME}
declare -A ssh_configs=(
["git2.ring-zero.co.uk"]="gitea_rsa"
["git.ring-zero.co.uk"]="gitlab_rsa"
["gitlab.com"]="gitlab_rsa"
["github.com"]="github_rsa"
["git.devuan.org"]="devuan_rsa"
["salsa.debian.org"]="debian_rsa"
)
for host in "\${!ssh_configs[@]}"; do
cat <<-EOF2 | sudo tee -a "\$HOME/.ssh/config" >/dev/null
Host \$host
User git
Preferredauthentications publickey
IdentityFile "\$HOME/.ssh/\${ssh_configs[\$host]}"
EOF2
done
EOF
# Make scripts executable
# chmod +x /tmp/generate-ssh-key.sh /tmp/ssh-key-add.sh /tmp/ssh-key-permissions.sh /tmp/ssh-config.sh
chmod +x ${KEY_SCRIPTS_DIR}/*.sh
# Execute scripts
# "${KEY_SCRIPTS_DIR}"/set-zstyle.sh
# "${KEY_SCRIPTS_DIR}"/generate-ssh-key.sh
# "${KEY_SCRIPTS_DIR}"/ssh-key-add.sh
# "${KEY_SCRIPTS_DIR}"/ssh-key-permissions.sh
# "${KEY_SCRIPTS_DIR}"/ssh-config.sh
# Generate system keys
ssh-keygen -A
# Generate root user keys if not present
if [ ! -f "${HOME}"/.ssh/id_rsa.pub ]; then
ssh-keygen -q -t rsa -N '' -f "${HOME}"/.ssh/id_rsa 2>/dev/null <<< y >/dev/null
chmod 644 "${HOME}"/.ssh/id_rsa.pub
fi