增强 sudo-ssh.sh 脚本,添加 SSH 和 apt 依赖修复功能
This commit is contained in:
61
sudo-ssh.sh
61
sudo-ssh.sh
@@ -1,5 +1,51 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 一键准备目标 Linux 设备的 SSH 和部署 sudo 权限。
|
||||
#
|
||||
# 作用:
|
||||
# 1. 先验证/补齐 TARGET_USER 的 sudo 权限;没有 sudo 时尝试用 root 权限自动补齐。
|
||||
# 2. 判断目标设备是否已联网,避免 apt 安装时才失败。
|
||||
# 3. 清理并修复 apt 依赖状态,安装 openssh-server 相关依赖。
|
||||
# 4. 配置 SSH 端口、密码登录、key 登录和 root 登录策略。
|
||||
# 5. 自动放行 UFW/firewalld 中的 SSH 端口。
|
||||
# 6. 验证 ssh 服务 active、sshd 配置合法、端口已监听。
|
||||
# 7. 写入 /etc/sudoers.d/ecu-debug-client-deploy,供 client-deploy.sh 远程部署使用。
|
||||
# 8. 验证 TARGET_USER 可以无密码执行部署 sudo 命令。
|
||||
#
|
||||
# 前置要求:
|
||||
# - 本脚本需要在目标 Linux 设备本地执行,不依赖目标设备已开启 SSH。
|
||||
# - 目标系统为 Ubuntu/Debian 或兼容 apt 的发行版。
|
||||
# - 当前用户需要具备 sudo 权限;如果没有,需要当前 shell 已是 root,或知道 root 密码。
|
||||
# - 目标设备需要能访问 apt 软件源;如果只通 ZeroTier/LAN 但不通公网,请先修复 DNS/网关/代理。
|
||||
#deve
|
||||
# 常用用法:
|
||||
# 默认配置当前用户、22 端口、完整免密 sudo:
|
||||
# ./tools/ssh-sudo-zerotier/start.sh
|
||||
#
|
||||
# 指定目标用户名和 IP:
|
||||
# TARGET_USER=leador TARGET_IP=192.168.191.37 ./tools/ssh-sudo-zerotier/start.sh
|
||||
#
|
||||
# 当前用户没有 sudo,但知道 root 密码:
|
||||
# ROOT_PASSWORD='<root-password>' TARGET_USER=leador TARGET_IP=192.168.191.37 ./tools/ssh-sudo-zerotier/start.sh
|
||||
#
|
||||
# 使用非 22 端口:
|
||||
# SSH_PORT=2222 TARGET_USER=leador TARGET_IP=192.168.191.37 ./tools/ssh-sudo-zerotier/start.sh
|
||||
#
|
||||
# 环境变量:
|
||||
# TARGET_USER 后续部署机 SSH 登录和部署 sudo 的目标用户,默认取当前用户。
|
||||
# TARGET_IP 后续部署机访问目标设备的 IP,默认自动探测本机 IPv4。
|
||||
# SSH_PORT SSH 监听端口,默认 22。
|
||||
# PASSWORD_AUTH 是否允许密码登录:yes/no,默认 yes。
|
||||
# PUBKEY_AUTH 是否允许 SSH key 登录:yes/no,默认 yes。
|
||||
# PERMIT_ROOT_LOGIN 是否允许 root SSH 登录,默认 no。
|
||||
# CONNECTIVITY_HOSTS 联网检测地址列表,默认 "223.5.5.5 1.1.1.1 8.8.8.8"。
|
||||
# ROOT_PASSWORD 当前用户无 sudo 时可选传入 root 密码;为空时 su 会交互询问。
|
||||
#
|
||||
# 执行后,在部署机验证并部署:
|
||||
# nc -vz -w 3 "$TARGET_IP" "$SSH_PORT"
|
||||
# ssh -p "$SSH_PORT" "$TARGET_USER@$TARGET_IP" "hostname && whoami && sudo -n id"
|
||||
# ./client-deploy.sh --deploy-only
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
TARGET_USER=${TARGET_USER:-leador}
|
||||
@@ -224,6 +270,17 @@ check_connectivity() {
|
||||
fi
|
||||
}
|
||||
|
||||
repair_apt_dependencies() {
|
||||
log_info "清理并修复 apt 依赖状态"
|
||||
need_cmd apt-get
|
||||
|
||||
run_root apt-get clean
|
||||
run_root bash -c 'rm -rf /var/lib/apt/lists/*'
|
||||
run_root apt-get update
|
||||
run_root apt-get --fix-broken install -y
|
||||
run_root apt-get install -y libtalloc2 libtdb1 libtevent0 openssh-client openssh-server
|
||||
}
|
||||
|
||||
install_ssh_server() {
|
||||
if command -v sshd >/dev/null 2>&1; then
|
||||
log_info "openssh-server 已存在,跳过安装"
|
||||
@@ -236,9 +293,7 @@ install_ssh_server() {
|
||||
fi
|
||||
|
||||
log_info "安装 openssh-server"
|
||||
need_cmd apt-get
|
||||
run_root apt-get update
|
||||
run_root apt-get install -y openssh-server
|
||||
repair_apt_dependencies
|
||||
}
|
||||
|
||||
configure_sshd() {
|
||||
|
||||
Reference in New Issue
Block a user