40 lines
1.6 KiB
Bash
Executable File
40 lines
1.6 KiB
Bash
Executable File
#!/bin/sh
|
|
# /3rd_rw/sshd/start_sshd.sh
|
|
# Starts Dropbear with key-only auth. Also re-creates the runtime bind mounts:
|
|
# /etc/passwd -> /3rd_rw/sshd/etc_passwd (root home -> /3rd_rw/sshd/home)
|
|
# /dev/pts -> devpts on /dev/shm/pts (PTY workaround; /dev is static ro)
|
|
# Must run as root. Idempotent.
|
|
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/basic/bin
|
|
export PATH
|
|
mkdir -p /3rd_rw/sshd
|
|
|
|
# 1) passwd bind mount (root home must be writable for ~/.ssh/authorized_keys)
|
|
if ! grep -q '^root:x:0:0:root:/3rd_rw/sshd/home:' /etc/passwd 2>/dev/null; then
|
|
mount --bind /3rd_rw/sshd/etc_passwd /etc/passwd 2>>/3rd_rw/sshd/mount.log \
|
|
|| mount -o bind /3rd_rw/sshd/etc_passwd /etc/passwd 2>>/3rd_rw/sshd/mount.log
|
|
fi
|
|
|
|
# 2) PTY: /dev is a static ro squashfs, no devtmpfs. Mount devpts on tmpfs
|
|
# and bind it over /dev/pts. /dev/ptmx (5,2) remains the static node.
|
|
mkdir -p /dev/shm/pts
|
|
if ! grep -q ' /dev/shm/pts ' /proc/mounts; then
|
|
mount -t devpts -o mode=620,ptmxmode=666,gid=5 devpts /dev/shm/pts 2>>/3rd_rw/sshd/mount.log \
|
|
|| mount -t devpts devpts /dev/shm/pts 2>>/3rd_rw/sshd/mount.log
|
|
fi
|
|
if ! grep -q ' /dev/pts ' /proc/mounts; then
|
|
mount --bind /dev/shm/pts /dev/pts 2>>/3rd_rw/sshd/mount.log
|
|
fi
|
|
|
|
# 3) already running?
|
|
if [ -f /3rd_rw/sshd/dropbear.pid ]; then
|
|
PID=$(cat /3rd_rw/sshd/dropbear.pid)
|
|
if kill -0 "$PID" 2>/dev/null && grep -q dropbear "/proc/$PID/cmdline" 2>/dev/null; then
|
|
exit 0
|
|
fi
|
|
rm -f /3rd_rw/sshd/dropbear.pid
|
|
fi
|
|
|
|
# 4) start key-only Dropbear (password auth is disabled at build time)
|
|
/3rd_rw/sshd/dropbear -r /3rd_rw/sshd/host_key -p 22 \
|
|
-P /3rd_rw/sshd/dropbear.pid -E >> /3rd_rw/sshd/dropbear.log 2>&1 &
|