2025-12-24 12:42:53 +08:00
|
|
|
|
#!/bin/sh
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
|
|
# ======================================================
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# OpenWrt SSH 公钥生成脚本
|
|
|
|
|
|
# 自动检查并安装 ssh-keygen
|
2025-12-24 12:42:53 +08:00
|
|
|
|
# ======================================================
|
|
|
|
|
|
|
|
|
|
|
|
KEY_NAME="id_dropbear"
|
|
|
|
|
|
HIDDEN_DIR="$HOME/.ssh"
|
|
|
|
|
|
PUBLIC_DIR="$HOME/ssh_public" # 普通目录,方便用户下载
|
|
|
|
|
|
|
|
|
|
|
|
PRIV_KEY="$HIDDEN_DIR/$KEY_NAME"
|
|
|
|
|
|
PUB_KEY="$HIDDEN_DIR/$KEY_NAME.pub"
|
|
|
|
|
|
PUB_KEY_COPY="$PUBLIC_DIR/$KEY_NAME.pub"
|
|
|
|
|
|
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
|
|
|
|
|
# 检查 ssh-keygen 是否存在
|
|
|
|
|
|
# ------------------------------------------------------
|
|
|
|
|
|
if ! command -v ssh-keygen >/dev/null 2>&1; then
|
|
|
|
|
|
echo "⚠️ 未检测到 ssh-keygen,尝试安装 openssh-keygen ..."
|
|
|
|
|
|
|
|
|
|
|
|
# opkg 安装阶段不能让 set -e 直接中断
|
|
|
|
|
|
set +e
|
|
|
|
|
|
opkg update
|
|
|
|
|
|
opkg install openssh-keygen
|
|
|
|
|
|
RET=$?
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
|
|
|
|
if [ $RET -ne 0 ]; then
|
|
|
|
|
|
echo "❌ openssh-keygen 安装失败"
|
|
|
|
|
|
echo "请检查网络或软件源是否正常"
|
|
|
|
|
|
exit 1
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "✅ openssh-keygen 安装完成"
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
# ------------------------------------------------------
|
2025-12-24 12:42:53 +08:00
|
|
|
|
# 创建目录
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
2025-12-24 12:42:53 +08:00
|
|
|
|
mkdir -p "$HIDDEN_DIR"
|
|
|
|
|
|
chmod 700 "$HIDDEN_DIR"
|
|
|
|
|
|
|
|
|
|
|
|
mkdir -p "$PUBLIC_DIR"
|
|
|
|
|
|
chmod 755 "$PUBLIC_DIR"
|
|
|
|
|
|
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
2025-12-24 12:42:53 +08:00
|
|
|
|
# 生成密钥
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
2025-12-24 12:42:53 +08:00
|
|
|
|
if [ ! -f "$PRIV_KEY" ]; then
|
2026-01-11 16:53:59 +08:00
|
|
|
|
echo "🔐 未发现 SSH 密钥,开始生成(ed25519)..."
|
2025-12-24 12:42:53 +08:00
|
|
|
|
ssh-keygen -t ed25519 -f "$PRIV_KEY" -N ""
|
|
|
|
|
|
else
|
2026-01-11 16:53:59 +08:00
|
|
|
|
echo "ℹ️ 已存在 SSH 密钥,跳过生成"
|
|
|
|
|
|
echo "私钥路径: $PRIV_KEY"
|
2025-12-24 12:42:53 +08:00
|
|
|
|
fi
|
|
|
|
|
|
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
2025-12-24 12:42:53 +08:00
|
|
|
|
# 复制公钥到普通目录,方便用户下载
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
2025-12-24 12:42:53 +08:00
|
|
|
|
cp -f "$PUB_KEY" "$PUB_KEY_COPY"
|
|
|
|
|
|
chmod 644 "$PUB_KEY_COPY"
|
|
|
|
|
|
|
2026-01-11 16:53:59 +08:00
|
|
|
|
# ------------------------------------------------------
|
|
|
|
|
|
# 输出结果
|
|
|
|
|
|
# ------------------------------------------------------
|
|
|
|
|
|
echo "✅ SSH 公钥准备完成"
|
|
|
|
|
|
echo "隐藏目录公钥: $PUB_KEY"
|
|
|
|
|
|
echo "可下载公钥副本: $PUB_KEY_COPY"
|