首页主机资讯Debian SSH如何实现自动化运维

Debian SSH如何实现自动化运维

时间2025-11-17 11:26:04发布访客分类主机资讯浏览577
导读: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
  • 生成密钥对(推荐 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
    • 如需更高安全,后续可禁用密码登录(见第四节)

二 批量执行与文件分发

  • 并行批量执行(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.comrsync -avz -e ssh internal-01.example.com:/data/ ./data/
  • 安全建议
    • 私钥权限:chmod 600 ~/.ssh/id_*
    • 禁用主机密钥检查(仅内网可信环境):StrictHostKeyChecking=noUserKnownHostsFile=/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/configProxyJump
  • 交互式命令自动化(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
Debian SSH如何与其他服务集成 Debian SSH如何使用SSH代理

游客 回复需填写必要信息