Paramiko(SSH 远程操作)和 Fabric(批量执行命令)在 Python 运维自动化中的使用案例:
Paramiko 使用案例
-
远程执行命令
import paramiko
def execute_remote_command(hostname, username, password, command):
try:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, username=username, password=password)
stdin, stdout, stderr = client.exec_command(command)
print(stdout.read().decode())
except Exception as e:
print(f"Error: {e}")
finally:
client.close()if name == "main":
hostname = "your_remote_host"
username = "your_username"
password = "your_password"
command = "ls -l"
execute_remote_command(hostname, username, password, command)
上述代码定义了一个函数,通过 Paramiko 连接到远程服务器,执行指定的命令,并打印命令执行结果
import paramiko
def upload_file(hostname, port, username, password, local_path, remote_path):
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port=port, username=username, password=password)
sftp = client.open_sftp()
sftp.put(local_path, remote_path)
sftp.close()
client.close()
if __name__ == "__main__":
hostname = "192.168.56.10"
port = 22
username = "root"
password = "vagrant"
local_path = "localfile.txt"
remote_path = "/remote/path/remote.txt"
upload_file(hostname, port, username, password, local_path, remote_path)
该案例实现了将本地文件上传到远程服务器指定路径的功能。
Fabric 使用案例
-
远程执行命令并查看系统信息2:
from fabric import Connection
def check_server_info():
c = Connection('your - server - ip', user='your_username', connect_kwargs={"password": "your_password"})
result = c.run("uname -a", hide=True)
print("远程服务器信息:", result.stdout.strip())if name == "main":
check_server_info()
代码通过 Fabric 的Connection
对象连接到远程服务器,执行uname -a
命令获取系统信息并打印
- 批量更新 Docker 容器:
from fabric import Connection
from fabric.decorators import task
@task
def update_docker(c):
c.run("docker pull mydockerhub/myapp:latest")
c.run("docker stop myapp")
c.run("docker rm myapp")
c.run("docker run -d --name myapp -p 80:80 mydockerhub/myapp:latest")
if __name__ == "__main__":
hosts = ["server1_ip", "server2_ip"]
for host in hosts:
c = Connection(host, user='your_username', connect_kwargs={"password": "your_password"})
update_docker(c)
上述案例定义了一个更新 Docker 容器的任务,通过 Fabric 可以在多个远程服务器上批量执行该任务,实现 Docker 容器的更新。
-
批量执行脚本并传递参数4:
from fabric.api import run, env
env.hosts = ('192.168.1.110', '192.168.1.111')
env.user = "username"
env.password = "password"def robot(device):
with cd('/home/workspace/project'):
run('bash run.sh %s robot && sleep 1' % device)
执行时可以使用fab robot:device=5560
,这样就会在env.hosts
指定的远程服务器上的指定目录下执行run.sh
脚本,并传递参数5560 robot
。