最后活跃于 1777018731

适用于需要初始化配置多台服务器的场景

修订 38dad4ee774e78e28e4b973ebf2a8f4b5bb5e665

server-login-init.sh 原始文件
1#!/usr/bin/env bash
2set -euo pipefail
3
4# ====== 可配置项 ======
5PUB_KEY="ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQxxxxxxx [email protected]"
6SSH_DIR="$HOME/.ssh"
7AUTHORIZED_KEYS="$SSH_DIR/authorized_keys"
8SSHD_CONFIG="/etc/ssh/sshd_config"
9
10echo "[INFO] Starting server initialization..."
11
12# ====== 1. 确保 .ssh 目录存在且权限正确 ======
13echo "[INFO] Ensuring .ssh directory..."
14mkdir -p "$SSH_DIR"
15chmod 700 "$SSH_DIR"
16
17# ====== 2. 添加公钥(幂等处理:避免重复)======
18echo "[INFO] Adding public key..."
19touch "$AUTHORIZED_KEYS"
20
21if ! grep -qF "$PUB_KEY" "$AUTHORIZED_KEYS"; then
22 echo "$PUB_KEY" >> "$AUTHORIZED_KEYS"
23 echo "[INFO] Public key added."
24else
25 echo "[INFO] Public key already exists. Skipping."
26fi
27
28chmod 600 "$AUTHORIZED_KEYS"
29
30# ====== 3. 修改 sshd_config ======
31echo "[INFO] Configuring sshd..."
32
33# 备份
34cp "$SSHD_CONFIG" "${SSHD_CONFIG}.bak_$(date +%F_%H-%M-%S)"
35
36# 确保 PubkeyAuthentication 启用
37if grep -q "^#PubkeyAuthentication yes" "$SSHD_CONFIG"; then
38 sed -i 's/^#PubkeyAuthentication yes/PubkeyAuthentication yes/' "$SSHD_CONFIG"
39elif ! grep -q "^PubkeyAuthentication yes" "$SSHD_CONFIG"; then
40 echo "PubkeyAuthentication yes" >> "$SSHD_CONFIG"
41fi
42
43# ====== 4. 推荐安全增强项 ======
44
45# 禁止密码登录(互联网服务器强烈建议,内网/专网服务器可选)
46# if grep -q "^#PasswordAuthentication" "$SSHD_CONFIG"; then
47# sed -i 's/^#PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG"
48# elif grep -q "^PasswordAuthentication" "$SSHD_CONFIG"; then
49# sed -i 's/^PasswordAuthentication.*/PasswordAuthentication no/' "$SSHD_CONFIG"
50# else
51# echo "PasswordAuthentication no" >> "$SSHD_CONFIG"
52# fi
53
54# 禁止 root 直接登录(可选)
55# if grep -q "^#PermitRootLogin" "$SSHD_CONFIG"; then
56# sed -i 's/^#PermitRootLogin.*/PermitRootLogin prohibit-password/' "$SSHD_CONFIG"
57# elif grep -q "^PermitRootLogin" "$SSHD_CONFIG"; then
58# sed -i 's/^PermitRootLogin.*/PermitRootLogin prohibit-password/' "$SSHD_CONFIG"
59# else
60# echo "PermitRootLogin prohibit-password" >> "$SSHD_CONFIG"
61# fi
62
63# ====== 5. 重启 sshd ======
64echo "[INFO] Restarting sshd..."
65
66if command -v systemctl >/dev/null 2>&1; then
67 systemctl restart sshd || systemctl restart ssh
68else
69 service sshd restart || service ssh restart
70fi
71
72echo "[INFO] Done."