ubuntu

Ubuntu SSH脚本自动化教程

小樊
45
2025-06-21 03:53:02
栏目: 智能运维

在Ubuntu系统中,使用SSH脚本自动化任务可以显著提高系统管理员的工作效率。以下是一个详细的教程,涵盖了从基础到高级的SSH脚本自动化技巧。

基础设置

  1. 生成SSH密钥对

    使用 ssh-keygen 命令生成密钥对:

    ssh-keygen -t rsa -b 4096
    

    这将生成 id_rsa(私钥)和 id_rsa.pub(公钥)文件。

  2. 配置SSH无密码登录

    • 将公钥复制到远程服务器:

      ssh-copy-id user@remote_host
      
    • 在本地 ~/.ssh/config 文件中配置远程服务器信息:

      Host myserver
          HostName remote_host
          User user
          IdentityFile ~/.ssh/id_rsa
      
    • 使用配置文件连接:

      ssh myserver
      

编写和运行SSH脚本

  1. 创建Shell脚本

    使用文本编辑器(如 nanovim)创建一个脚本文件,例如 ssh_automation.sh

    #!/bin/bash
    ssh user@remote_host 'command_to_execute'
    

    确保脚本有执行权限:

    chmod +x ssh_automation.sh
    

    运行脚本:

    ./ssh_automation.sh
    
  2. 使用Cron作业定期执行脚本

    • 编辑当前用户的 crontab 文件:

      crontab -e
      
    • 添加定时任务,例如每天凌晨2点执行脚本:

      0 2 * * * /path/to/ssh_automation.sh >> /path/to/logfile.log 2>&1
      

    这将把标准输出和错误输出都追加到 logfile.log

高级技巧

  1. 使用Paramiko库进行Python自动化

    • 安装Paramiko库:

      pip install paramiko
      
    • 示例代码:

      import paramiko
      
      # 创建SSH客户端
      ssh = paramiko.SSHClient()
      ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
      
      # 连接到远程服务器
      ssh.connect(hostname='192.168.1.100', port=22, username='root', key_filename='/root/.ssh/id_rsa')
      
      # 执行命令
      stdin, stdout, stderr = ssh.exec_command('df -h')
      print(stdout.read().decode('utf-8'))
      
      ssh.close()
      
  2. 使用SFTP进行文件自动化传输

    • 安装 openssh-client

      sudo apt update
      sudo apt install openssh-client
      
    • 创建SFTP脚本 sftp_script.sh

      #!/bin/bash
      HOST='your_sftp_server.com'
      PORT='22'
      USER='your_username'
      PASSWORD='your_password'
      REMOTE_DIR='/path/to/remote/directory'
      LOCAL_DIR='/path/to/local/directory'
      
      # 创建临时密码文件
      echo "$PASSWORD" > /tmp/sftp_pass.txt
      chmod 600 /tmp/sftp_pass.txt
      
      # 使用SFTP连接并执行命令
      sftp -oPort=$PORT -oStrictHostKeyChecking=no -b /tmp/sftp_commands.txt $USER@$HOST << EOF
      cd $REMOTE_DIR
      put $LOCAL_DIR/*
      bye
      EOF
      
      # 删除临时文件
      rm /tmp/sftp_pass.txt
      rm /tmp/sftp_commands.txt
      
    • 赋予脚本执行权限并运行:

      chmod +x sftp_script.sh
      ./sftp_script.sh
      

通过以上步骤,你可以在Ubuntu系统中实现基本的SSH脚本自动化,并逐步掌握更高级的技巧,如使用Python的Paramiko库进行自动化操作和SFTP文件传输。这些技能将帮助你更高效地管理远程服务器和执行复杂任务。

0
看了该问题的人还看了