91 lines
2.9 KiB
Bash
Executable File
91 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# setup-ssh.sh - Configure SSH so any user gets the toes CLI
|
|
#
|
|
# This script:
|
|
# 1. Compiles and installs the NSS module
|
|
# 2. Adds "toes" to nsswitch.conf passwd line
|
|
# 3. Configures PAM to accept any password (home network appliance)
|
|
# 4. Ensures PasswordAuthentication is enabled in sshd
|
|
# 5. Adds /usr/local/bin/toes to /etc/shells
|
|
# 6. Restarts sshd
|
|
#
|
|
# Run as root on the toes machine.
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
echo "==> Setting up SSH auto-CLI for toes"
|
|
|
|
# 1. Compile and install NSS module
|
|
echo " Compiling NSS module..."
|
|
gcc -shared -o /tmp/libnss_toes.so.2 "$SCRIPT_DIR/nss/libnss_toes.c" -fPIC
|
|
cp /tmp/libnss_toes.so.2 /lib/
|
|
ldconfig
|
|
echo " Installed libnss_toes.so.2"
|
|
|
|
# 2. Add toes to nsswitch.conf
|
|
if ! grep -q 'passwd:.*toes' /etc/nsswitch.conf; then
|
|
sed -i 's/^passwd:.*/& toes/' /etc/nsswitch.conf
|
|
echo " Added toes to nsswitch.conf"
|
|
else
|
|
echo " nsswitch.conf already configured"
|
|
fi
|
|
|
|
# 3. Configure PAM - accept any password for SSH
|
|
if ! grep -q 'pam_permit.so.*# toes' /etc/pam.d/sshd; then
|
|
# Comment out existing auth and replace with pam_permit
|
|
sed -i '/^@include common-auth/s/^/# /' /etc/pam.d/sshd
|
|
sed -i '/^auth/s/^/# /' /etc/pam.d/sshd
|
|
# Add pam_permit after the commented lines
|
|
echo 'auth sufficient pam_permit.so # toes' >> /etc/pam.d/sshd
|
|
echo " Configured PAM for passwordless SSH"
|
|
else
|
|
echo " PAM already configured"
|
|
fi
|
|
|
|
# 4. Ensure PasswordAuthentication yes in sshd_config
|
|
SSHD_CONFIG="/etc/ssh/sshd_config"
|
|
if grep -q '^PasswordAuthentication no' "$SSHD_CONFIG"; then
|
|
sed -i 's/^PasswordAuthentication no/PasswordAuthentication yes/' "$SSHD_CONFIG"
|
|
echo " Enabled PasswordAuthentication"
|
|
elif grep -q '^#PasswordAuthentication' "$SSHD_CONFIG"; then
|
|
sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication yes/' "$SSHD_CONFIG"
|
|
echo " Enabled PasswordAuthentication"
|
|
elif ! grep -q '^PasswordAuthentication yes' "$SSHD_CONFIG"; then
|
|
echo 'PasswordAuthentication yes' >> "$SSHD_CONFIG"
|
|
echo " Added PasswordAuthentication yes"
|
|
else
|
|
echo " PasswordAuthentication already enabled"
|
|
fi
|
|
|
|
# 5. Ensure /usr/local/bin/toes is in /etc/shells
|
|
TOES_SHELL="/usr/local/bin/toes"
|
|
if ! grep -q "^${TOES_SHELL}$" /etc/shells; then
|
|
echo "$TOES_SHELL" >> /etc/shells
|
|
echo " Added $TOES_SHELL to /etc/shells"
|
|
else
|
|
echo " $TOES_SHELL already in /etc/shells"
|
|
fi
|
|
|
|
# Ensure the toes binary exists (symlink to bun entry point)
|
|
if [ ! -f "$TOES_SHELL" ]; then
|
|
echo " WARNING: $TOES_SHELL does not exist yet"
|
|
echo " Create it with: ln -sf /path/to/toes/cli $TOES_SHELL"
|
|
fi
|
|
|
|
# Ensure /home/toes exists for guest sessions
|
|
if [ ! -d /home/toes ]; then
|
|
mkdir -p /home/toes
|
|
chmod 755 /home/toes
|
|
echo " Created /home/toes"
|
|
fi
|
|
|
|
# 6. Restart sshd
|
|
echo " Restarting sshd..."
|
|
systemctl restart sshd || service ssh restart || true
|
|
|
|
echo "==> Done. Any SSH user will now get the toes CLI."
|
|
echo " toes@toes.local still gets a regular shell."
|