update 05
This commit is contained in:
37
generate_ssh_key.sh
Normal file
37
generate_ssh_key.sh
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# ======================================================
|
||||||
|
# OpenWrt 公钥生成脚本
|
||||||
|
# ======================================================
|
||||||
|
|
||||||
|
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"
|
||||||
|
|
||||||
|
# 创建目录
|
||||||
|
mkdir -p "$HIDDEN_DIR"
|
||||||
|
chmod 700 "$HIDDEN_DIR"
|
||||||
|
|
||||||
|
mkdir -p "$PUBLIC_DIR"
|
||||||
|
chmod 755 "$PUBLIC_DIR"
|
||||||
|
|
||||||
|
# 生成密钥
|
||||||
|
if [ ! -f "$PRIV_KEY" ]; then
|
||||||
|
echo "未发现 SSH 密钥,开始生成(ed25519)..."
|
||||||
|
ssh-keygen -t ed25519 -f "$PRIV_KEY" -N ""
|
||||||
|
else
|
||||||
|
echo "已存在 SSH 密钥,跳过生成"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 复制公钥到普通目录,方便用户下载
|
||||||
|
cp -f "$PUB_KEY" "$PUB_KEY_COPY"
|
||||||
|
chmod 644 "$PUB_KEY_COPY"
|
||||||
|
|
||||||
|
echo "✅ 公钥生成完成"
|
||||||
|
echo "隐藏目录: $PUB_KEY"
|
||||||
|
echo "可下载副本: $PUB_KEY_COPY"
|
||||||
44
install_pubkey_fnos.sh
Normal file
44
install_pubkey_fnos.sh
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# ======================================================
|
||||||
|
# 飞牛 NAS 安装公钥 & 修复权限 & 添加 sudo NOPASSWD(避免重复)
|
||||||
|
# ======================================================
|
||||||
|
|
||||||
|
USER_NAME="$1"
|
||||||
|
PUB_KEY_PATH="$2"
|
||||||
|
|
||||||
|
if [ -z "$USER_NAME" ] || [ -z "$PUB_KEY_PATH" ]; then
|
||||||
|
echo "用法: $0 <用户名> <公钥文件路径>"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
HOME_DIR="/home/$USER_NAME"
|
||||||
|
SSH_DIR="$HOME_DIR/.ssh"
|
||||||
|
AUTH_KEYS="$SSH_DIR/authorized_keys"
|
||||||
|
|
||||||
|
# ===== 安装公钥 =====
|
||||||
|
mkdir -p "$SSH_DIR"
|
||||||
|
cp -f "$PUB_KEY_PATH" "$AUTH_KEYS"
|
||||||
|
|
||||||
|
# 修复权限
|
||||||
|
chown "$USER_NAME" "$HOME_DIR" "$SSH_DIR" "$AUTH_KEYS"
|
||||||
|
chmod 700 "$SSH_DIR"
|
||||||
|
chmod 600 "$AUTH_KEYS"
|
||||||
|
|
||||||
|
echo "✅ 公钥已安装并权限修复完成"
|
||||||
|
|
||||||
|
# ===== 配置 sudoers NOPASSWD =====
|
||||||
|
SUDO_FILE="/etc/sudoers.d/${USER_NAME}_poweroff"
|
||||||
|
SUDO_RULE="$USER_NAME ALL=(root) NOPASSWD:/usr/bin/systemctl poweroff"
|
||||||
|
|
||||||
|
# 如果文件不存在或者文件内容不同,则写入
|
||||||
|
if [ ! -f "$SUDO_FILE" ] || ! grep -Fxq "$SUDO_RULE" "$SUDO_FILE"; then
|
||||||
|
echo "$SUDO_RULE" > "$SUDO_FILE"
|
||||||
|
chmod 440 "$SUDO_FILE"
|
||||||
|
echo "✅ sudoers 已添加 NOPASSWD 规则 ($SUDO_FILE)"
|
||||||
|
else
|
||||||
|
echo "⚠️ sudoers NOPASSWD 规则已存在,无需重复添加"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "可以测试: ssh $USER_NAME@NAS_IP 'sudo -n /usr/bin/systemctl poweroff'"
|
||||||
@@ -1,66 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# ===== 参数 =====
|
|
||||||
USER_NAME="$1"
|
|
||||||
NAS_IP="$2"
|
|
||||||
|
|
||||||
KEY_DIR="/root/.ssh"
|
|
||||||
KEY_NAME="id_dropbear"
|
|
||||||
PRIV_KEY="$KEY_DIR/$KEY_NAME"
|
|
||||||
PUB_KEY="$KEY_DIR/$KEY_NAME.pub"
|
|
||||||
|
|
||||||
# ===== 参数检查 =====
|
|
||||||
if [ -z "$USER_NAME" ] || [ -z "$NAS_IP" ]; then
|
|
||||||
echo "用法: $0 <飞牛用户名> <飞牛IP>"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ===== 阶段一:在 OpenWrt 上生成 SSH 密钥 =====
|
|
||||||
echo "== [1/2] 检查并生成 SSH 密钥 =="
|
|
||||||
|
|
||||||
if [ ! -d "$KEY_DIR" ]; then
|
|
||||||
mkdir -p "$KEY_DIR"
|
|
||||||
chmod 700 "$KEY_DIR"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f "$PRIV_KEY" ]; then
|
|
||||||
echo "未发现 SSH 密钥,开始生成(ed25519)..."
|
|
||||||
ssh-keygen -t ed25519 -f "$PRIV_KEY" -N ""
|
|
||||||
else
|
|
||||||
echo "已存在 SSH 密钥,跳过生成"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# ===== 阶段二:检测远程是否能免密,首次登录提示手动输入密码 =====
|
|
||||||
echo "== [2/2] 推送公钥到飞牛 NAS =="
|
|
||||||
|
|
||||||
# 尝试用公钥免密登录
|
|
||||||
ssh -o BatchMode=yes "$USER_NAME@$NAS_IP" "echo '免密测试成功'" >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "⚠️ 检测到首次登录,需手动输入密码并确认 host key"
|
|
||||||
echo "请在提示时输入密码,完成一次手动登录,然后再运行脚本即可实现免密"
|
|
||||||
echo "你可以先运行: ssh $USER_NAME@$NAS_IP"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 远程操作:创建 .ssh 目录及权限
|
|
||||||
ssh "$USER_NAME@$NAS_IP" << 'EOF'
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# 使用远程真实 HOME
|
|
||||||
HOME_DIR="$HOME"
|
|
||||||
SSH_DIR="$HOME_DIR/.ssh"
|
|
||||||
AUTH_KEYS="$SSH_DIR/authorized_keys"
|
|
||||||
|
|
||||||
mkdir -p "$SSH_DIR"
|
|
||||||
chmod 700 "$SSH_DIR"
|
|
||||||
|
|
||||||
touch "$AUTH_KEYS"
|
|
||||||
chmod 600 "$AUTH_KEYS"
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# 推送公钥到远程 authorized_keys
|
|
||||||
cat "$PUB_KEY" | ssh "$USER_NAME@$NAS_IP" "cat >> ~/.ssh/authorized_keys"
|
|
||||||
|
|
||||||
echo "✅ SSH 公钥已成功推送:$USER_NAME@$NAS_IP"
|
|
||||||
echo "ℹ️ 以后可直接免密登录(ssh $USER_NAME@$NAS_IP)"
|
|
||||||
Reference in New Issue
Block a user