要对接服务器执行自动化任务,可以使用脚本通过 SSH/SFTP 协议进行交互,以下是懒人脚本对接服务器的完整指南:
核心方案:使用 Python + Paramiko 库
import paramiko 服务器配置 HOST = "your.server.ip" PORT = 22 USER = "username" PASSWORD = "password" # 建议改用密钥认证 KEY_PATH = "/path/to/private_key" # 可选密钥路径 1. 创建SSH客户端 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 2. 连接服务器(密码/密钥二选一) ssh.connect(HOST, PORT, USER, PASSWORD) 或使用密钥:ssh.connect(HOST, PORT, USER, key_filename=KEY_PATH) 3. 执行命令示例 stdin, stdout, stderr = ssh.exec_command("ls -l /tmp") print("命令输出:") print(stdout.read().decode()) 4. 文件传输 (SFTP) sftp = ssh.open_sftp() 上传文件 sftp.put("local_file.txt", "/remote/path/file.txt") 下载文件 sftp.get("/remote/path/file.txt", "local_copy.txt") sftp.close() 5. 关闭连接 ssh.close()
- 确保服务器开启 SSH 服务(默认端口 22)
- 生成 SSH 密钥对(更安全):
ssh-keygen -t rsa ssh-copy-id user@server_ip # 上传公钥
pip install paramiko # Python SSH库
A. 执行远程命令
def run_command(cmd): _, stdout, stderr = ssh.exec_command(cmd) exit_status = stdout.channel.recv_exit_status() if exit_status != 0: error = stderr.read().decode() raise Exception(f"Command failed: {error}") return stdout.read().decode() result = run_command("df -h") print("磁盘使用情况:\n", result)
B. 文件管理
上传目录 def upload_dir(local_dir, remote_dir): for root, dirs, files in os.walk(local_dir): rel_path = os.path.relpath(root, local_dir) remote_path = os.path.join(remote_dir, rel_path) try: sftp.mkdir(remote_path) except: pass for file in files: local_file = os.path.join(root, file) remote_file = os.path.join(remote_path, file) sftp.put(local_file, remote_file)
C. 交互式会话
执行需要交互的命令 channel = ssh.invoke_shell() channel.send("sudo apt update\n") channel.send("your_password\n") # 注意安全风险 time.sleep(2) output = channel.recv(9999).decode() print(output)
1、改用密钥认证:
private_key = paramiko.RSAKey.from_private_key_file(KEY_PATH) ssh.connect(HOST, PORT, USER, pkey=private_key)
2、敏感信息处理:
- 使用环境变量存储密码
- 配置文件设置权限chmod 600 config.ini
3、防火墙设置:
- 限制 SSH 访问 IP 白名单
- 修改默认 SSH 端口
1. 使用 Shell 脚本 + sshpass
安装 sshpass sudo apt install sshpass 自动化登录执行 sshpass -p 'password' ssh user@host "ls -l > result.txt" 文件传输 sshpass -p 'password' scp local.txt user@host:/remote/path/
Ansible:专业服务器管理工具
Fabric:Python 自动化部署库
1、自动部署代码:git pull && restart service
2、日志下载分析
3、定时备份数据库
4、批量服务器状态监控
>注意:生产环境务必使用密钥认证而非密码,敏感操作建议添加二次验证。
根据需求复杂度选择合适方案,简单任务用 shell 脚本即可,复杂操作推荐 Python + Paramiko。
文章摘自:https://idc.huochengrm.cn/fwq/12775.html
评论
校鸿祯
回复要快速实现懒人脚本与服务器的对接,首先确保脚本支持远程调用,然后通过API接口与服务器交互,配置好网络通信,最后进行测试确保脚本稳定运行。