使用Python和Shell脚本批量管理Linux服务器 在Linux服务器管理中,如果需要对多台服务器进行相同的操作,手动一个个登录操作显然非常耗时费力,这时候就需要使用批量管理的方法,而Python和Shell脚本是非常实用的工具,可以帮助管理员自动化操作,提高工作效率。 本文将介绍如何使用Python和Shell脚本批量管理Linux服务器,主要包括以下部分: 1. SSH登录服务器 2. 执行Linux命令 3. 远程复制文件 4. 修改远程文件 5. 停止和启动服务 6. 执行定时任务 1. SSH登录服务器 首先需要使用SSH登录到服务器,可以使用paramiko模块来实现,示例代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.100', username='root', password='123456') stdin, stdout, stderr = ssh.exec_command('hostname') print(stdout.read().decode()) ssh.close() ``` 其中,`paramiko.SSHClient()`用来创建SSH客户端对象,`ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())`用来自动添加新主机证书,`ssh.connect()`用来登录服务器,`stdin, stdout, stderr = ssh.exec_command()`用来执行命令,`print(stdout.read().decode())`用来输出执行结果,`ssh.close()`用来关闭连接。 2. 执行Linux命令 在登录了服务器之后,可以执行各种Linux命令,比如查看系统信息、安装软件、重启服务器等,示例代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.100', username='root', password='123456') # 查看系统信息 stdin, stdout, stderr = ssh.exec_command('uname -a') print(stdout.read().decode()) # 安装软件 stdin, stdout, stderr = ssh.exec_command('apt-get install nginx -y') print(stdout.read().decode()) # 重启服务器 stdin, stdout, stderr = ssh.exec_command('reboot') print(stdout.read().decode()) ssh.close() ``` 注意,在执行命令时需要考虑命令的安全性和正确性,避免执行过程中出现错误。 3. 远程复制文件 在服务器管理过程中,有时需要将本地文件复制到远程服务器上,或者将远程服务器上的文件复制到本地,可以使用`sftp`模块来实现,示例代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.100', username='root', password='123456') sftp = ssh.open_sftp() # 本地文件复制到远程服务器 sftp.put('local_file.txt', '/root/remote_file.txt') # 远程服务器文件复制到本地 sftp.get('/root/remote_file.txt', 'local_file.txt') sftp.close() ssh.close() ``` 4. 修改远程文件 在服务器管理过程中,有时需要修改远程服务器上的文件,可以使用`sftp`模块或者`ssh`模块来实现,示例代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.100', username='root', password='123456') # 使用sftp修改远程文件 sftp = ssh.open_sftp() file = sftp.file('/etc/nginx/nginx.conf', 'w') file.write('修改后的内容') file.close() sftp.close() # 使用ssh修改远程文件 stdin, stdout, stderr = ssh.exec_command('sed -i \'s/old_content/new_content/g\' /etc/nginx/nginx.conf') ssh.close() ``` 5. 停止和启动服务 在服务器管理过程中,有时需要停止和启动服务,可以使用`ssh`模块来实现,示例代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.100', username='root', password='123456') # 停止和启动服务 stdin, stdout, stderr = ssh.exec_command('systemctl stop nginx') print(stdout.read().decode()) stdin, stdout, stderr = ssh.exec_command('systemctl start nginx') print(stdout.read().decode()) ssh.close() ``` 6. 执行定时任务 在服务器管理过程中,有时需要执行定时任务,可以使用`crontab`来实现,示例代码如下: ```python import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('192.168.1.100', username='root', password='123456') # 添加定时任务 stdin, stdout, stderr = ssh.exec_command('echo "* * * * * /usr/bin/python3 /root/test.py" >> /etc/crontab') print(stdout.read().decode()) # 删除定时任务 stdin, stdout, stderr = ssh.exec_command('sed -i \'$d\' /etc/crontab') print(stdout.read().decode()) ssh.close() ``` 总结 本文介绍了如何使用Python和Shell脚本批量管理Linux服务器,包括SSH登录服务器、执行Linux命令、远程复制文件、修改远程文件、停止和启动服务以及执行定时任务等操作。这些方法可以帮助管理员自动化操作,提高工作效率,值得在实际工作中使用。