Debian SSH如何实现自动化运维
导读:Debian SSH自动化运维实战指南 一 基础准备与免密登录 安装与启动 SSH 在控制机与被控机安装 OpenSSH 客户端/服务端:sudo apt-get update && sudo apt-get insta...
Debian SSH自动化运维实战指南
一 基础准备与免密登录
- 安装与启动 SSH
- 在控制机与被控机安装 OpenSSH 客户端/服务端:
sudo apt-get update & & sudo apt-get install -y openssh-client openssh-server - 启动并设置开机自启:
sudo systemctl enable --now ssh
- 在控制机与被控机安装 OpenSSH 客户端/服务端:
- 生成密钥对(推荐 Ed25519,兼容性好可选 RSA 4096)
ssh-keygen -t ed25519 -C "ops@debian"或ssh-keygen -t rsa -b 4096 -C "ops@debian"
- 分发公钥到目标主机
- 交互式:
ssh-copy-id user@host - 手动追加:
ssh user@host 'mkdir -p ~/.ssh & & cat > > ~/.ssh/authorized_keys' < ~/.ssh/id_ed25519.pub
- 交互式:
- 目录与权限(服务端)
chmod 700 ~/.ssh & & chmod 600 ~/.ssh/authorized_keys- 如为 root 代为配置,务必修正属主:
chown -R user:user ~user/.ssh
- 首次连接与主机指纹
- 首次连接确认指纹:
ssh user@host,看到 ECDSA/RSA 指纹提示输入 yes 保存
- 首次连接确认指纹:
- 可选优化
- 禁用 DNS 反查加速连接:
echo "UseDNS no" | sudo tee -a /etc/ssh/sshd_config & & sudo systemctl restart ssh - 如需更高安全,后续可禁用密码登录(见第四节)
- 禁用 DNS 反查加速连接:
二 批量执行与文件分发
- 并行批量执行(Bash + GNU Parallel)
- 安装:
sudo apt-get install -y parallel - 主机清单:
cat > hosts.txt < < EOF 192.0.2.11 192.0.2.12 192.0.2.13 EOF - 执行命令:
parallel -i -j 10 ssh { } 'sudo apt-get update & & sudo apt-get -y upgrade' :::: hosts.txt
- 安装:
- 脚本分发与远程执行
- 分发:
scp deploy.sh user@host:/tmp/ & & ssh user@host 'chmod +x /tmp/deploy.sh & & sudo /tmp/deploy.sh'
- 分发:
- 目录同步(Rsync over SSH)
rsync -avz -e ssh /opt/app/ user@host:/opt/app/
- SSH 配置简化与代理转发
~/.ssh/config示例:Host web*.example.com User deploy IdentityFile ~/.ssh/id_ed25519_web Port 22 ForwardAgent yes Host bastion HostName bastion.example.com User jump IdentityFile ~/.ssh/id_ed25519_bastion Host internal-*.example.com User app ProxyJump bastion- 使用:
ssh web01.example.com、rsync -avz -e ssh internal-01.example.com:/data/ ./data/
- 安全建议
- 私钥权限:
chmod 600 ~/.ssh/id_* - 禁用主机密钥检查(仅内网可信环境):
StrictHostKeyChecking=no、UserKnownHostsFile=/dev/null(CI/脚本中临时使用)
- 私钥权限:
三 进阶场景 隧道与交互自动化
- 端口转发与隧道
- 本地端口转发:
ssh -L 127.0.0.1:3306:db.internal:3306 user@gateway - 远程端口转发:
ssh -R 8080:localhost:80 user@gateway - 动态端口转发(SOCKS5):
ssh -D 1080 user@gateway
- 本地端口转发:
- 通过跳板机访问内网
- 单跳:
ssh -J bastion user@internal - 多跳或复杂场景使用
~/.ssh/config的ProxyJump
- 单跳:
- 交互式命令自动化(Expect)
- 示例(尽量避免明文密码,优先密钥;仅在无法改造时使用):
#!/usr/bin/expect -f set timeout 30 set user [lindex $argv 0] set host [lindex $argv 1] spawn ssh $user@$host expect { "password:" { send "YourPass\r"; exp_continue } "$ " { send "sudo systemctl restart nginx\r" } timeout { puts "timeout"; exit 1 } } expect "$ " send "exit\r" - 安装:
sudo apt-get install -y expect
- 示例(尽量避免明文密码,优先密钥;仅在无法改造时使用):
四 安全加固与合规审计
- 加固 SSH 服务端
- 编辑
/etc/ssh/sshd_config:PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes KbdInteractiveAuthentication no X11Forwarding no AllowUsers deploy admin Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr MACs hmac-sha2-512,hmac-sha2-256 - 重启:
sudo systemctl restart ssh
- 编辑
- 主机密钥与权限
- 服务端主机密钥权限异常会导致握手失败,修复示例:
cd /etc/ssh chmod 600 ssh_host_* chmod 644 *.pub
- 服务端主机密钥权限异常会导致握手失败,修复示例:
- 日志与监控
- 登录日志位置:Debian 通常为 /var/log/auth.log
- 实时监控:
sudo journalctl -f -u ssh - 关键查询:
- 成功登录:
grep "Accepted" /var/log/auth.log - 失败尝试:
grep "Failed\|authentication failure" /var/log/auth.log
- 成功登录:
- 日志轮转示例(/etc/logrotate.d/ssh):
/var/log/auth.log { daily rotate 7 compress missingok notifempty create 640 root adm }
- 合规提示
- 变更前备份配置,先在测试环境验证
- 禁用密码前确保密钥登录、跳板与应急通道可用
- 对公网暴露端口建议改为非标准端口并配合防火墙白名单
五 规模化自动化工具 Ansible
- 特性与原理
- 基于 SSH 的无代理架构,使用 Inventory 管理主机清单,通过 Playbook 编排任务,内置 apt/yum/service 等丰富模块
- 快速上手
-
安装:
sudo apt-get install -y ansible -
清单:`cat > inventory.ini < < EOF [web] 192.0.2.11 192.0.2.12
[db] 192.0.2.13 EOF`
-
Ad-Hoc:
ansible web -i inventory.ini -m apt -a "name=nginx state=latest" --become -
Playbook(示例):
- hosts: web become: yes tasks: - name: Install Nginx apt: name=nginx state=latest - name: Ensure service running service: name=nginx state=started enabled=yes -
执行:
ansible-playbook -i inventory.ini web.yml
-
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Debian SSH如何实现自动化运维
本文地址: https://pptw.com/jishu/748758.html
