paramiko 连接失败或卡住需显式调用 invoke_shell() 并手动处理提示符与密码;fabric 3.x 改用 connection 对象模型,不再支持 @task;容器中磁盘统计应避免 psutil,改用 shutil.disk_usage 或 df 命令;ansible-runner 传密钥须用 envvars 或权限受限的 extra_vars 文件。

用 paramiko 执行远程命令时连接失败或卡住怎么办
多数人第一次用 paramiko 连 SSH 就遇到超时、认证失败或交互式命令(如 sudo)卡住,根本原因是它默认不开启终端模拟和自动响应提示符。
- 必须显式设置
invoke_shell()并手动处理回车、密码提示、sudo密码输入——直接exec_command()对交互式命令无效 -
set_missing_host_key_policy(paramiko.AutoAddPolicy())是开发调试必需项,但生产环境应改用RejectPolicy+ 预置 known_hosts - 执行带
sudo的命令时,不能靠stdin.write('password\n')简单覆盖:不同系统提示符不同([sudo] password for user:vsPassword:),建议用pexpect替代或加正则等待 - 连接后务必调用
channel.recv_ready()循环读取,否则容易漏掉输出;别依赖recv(1024)一次读完
fabric 3.x 和 2.x 的任务定义方式差异太大,怎么避免踩坑
fabric 3.x 彻底放弃全局 @task 装饰器,改用 Connection + Result 对象模型,老脚本直接运行会报 NameError: name 'run' is not defined。
- 2.x 写法:
@task装饰函数,用run()/sudo()直接调用;3.x 必须先实例化Connection(host),再调用c.run('ls') - 3.x 的
run()默认不继承本地环境变量(比如PATH),需显式传env={'PATH': '/usr/local/bin:/usr/bin'} - 并行执行不再用
-P参数,而是靠threading或concurrent.futures自己管理多个Connection - 如果团队混用版本,建议锁死
fabfile.py顶部加from fabric import Connection判断是否存在,避免导入错误
批量收集服务器磁盘使用率,为什么 psutil 在容器里返回不准
在 Docker 容器中直接用 psutil.disk_usage('/') ,往往返回宿主机根分区数据,而非容器挂载卷的实际用量——因为 psutil 读的是 /proc/mounts 和 /sys/fs/cgroup,而容器默认共享宿主机的 /proc。
- 正确做法是先确认目标路径是否为独立挂载点:
psutil.disk_usage('/data')(假设你挂了-v /host/data:/data) - 更可靠的方式是调用
shutil.disk_usage('/path')(Python 3.3+),它绕过psutil的 cgroup 检测逻辑,直接走statvfs - 若需跨主机统一采集,别依赖
psutil的disk_partitions(),它在 LXC/K8s 中可能漏掉 overlayfs 分区;改用subprocess.run(['df', '-P', '/path'], capture_output=True)解析原始输出
用 ansible-runner 调用 Ansible Playbook 时,如何传变量又不暴露敏感信息
直接把密码写进 extra_vars 字典或 JSON 文件,等于明文落地,日志、进程列表、容器镜像层都可能泄露。
- 优先用
envvars传敏感字段:启动时设ANSIBLE_BECOME_PASS=xxx,Playbook 里用{{ lookup('env', 'ANSIBLE_BECOME_PASS') }} - 避免在
extra_vars里传密钥内容,改用private_data_dir下的env/extra_vars文件,并确保该目录权限为700,且不在 Git 提交范围内 - 如果用
ansible-runner runCLI,别用--envvars命令行参数传密码(会出现在ps aux),改用--envvars @env.json从文件加载 - 注意
ansible-runner默认不清理临时工作目录,artifacts/下的stdout可能含调试输出里的变量值,上线前得清空或禁用详细日志
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










