Python 在具有解耦、冗余和异步功能的远程服务器上执行命令
我有一些服务器需要在其他服务器上执行命令。例如,Bitbucket服务器post接收钩子在另一台服务器上执行Python 在具有解耦、冗余和异步功能的远程服务器上执行命令,python,git,ssh,server,Python,Git,Ssh,Server,我有一些服务器需要在其他服务器上执行命令。例如,Bitbucket服务器post接收钩子在另一台服务器上执行git pull。另一个例子是CI服务器拉取一个新的docker映像并重新启动另一台服务器上的实例 我通常会为此使用ssh,专门为作业创建一个具有有限权限的用户/组 ssh的一些缺点是: 同步ssh调用意味着git推送将必须等待完成 如果由于任何原因无法联系主机,ssh命令将失败 维护密钥、用户和sudoers权限可能会变得很麻烦 几乎没有可能: 找到一个开箱即用的开源解决方案(到目
git pull
。另一个例子是CI服务器拉取一个新的docker映像并重新启动另一台服务器上的实例
我通常会为此使用ssh
,专门为作业创建一个具有有限权限的用户/组
ssh的一些缺点是:
- 同步
调用意味着ssh
git推送将必须等待完成
- 如果由于任何原因无法联系主机,
命令将失败ssh
- 维护密钥、用户和sudoers权限可能会变得很麻烦
- 找到一个开箱即用的开源解决方案(到目前为止,我一直在尝试,但运气不佳)
- 在每台服务器上设置一个RESTAPI,该服务器接受具有某种身份验证类型的调用,例如POST
- 设置Python/Cellery以在每个主机的不同队列上执行任务。这意味着每台服务器上都有一个芹菜工人,可以执行命令,还可能有一个服务接受RESTAPI调用,将它们转换为芹菜任务
ssh user@host "/usr/bin/foobar </dev/null >/dev/null 2>&1"
sshuser@host“/usr/bin/foobar/dev/null 2>&1”
- 主机尝试使用上述异步方法通过SSH启动任务。若主机不可用,任务将写入本地文件。Cron作业定期重试发送失败的任务。通过SSH密钥进行访问控制
- 主机通过将命令写入SFTP服务器上的文件来添加任务。目标主机上的Cron作业定期检查新命令,并在找到新命令时执行它们。通过SFTP服务器上的SSH密钥管理的访问控制
- 主机将任务发布到REST API,该API将任务添加到队列中。每个目标主机上的芹菜守护进程使用队列中的数据并执行任务。访问主要由发送到任务队列服务器的凭据管理
- 宿主将任务发布到API,该API将任务添加到队列。任务使用者节点将任务从队列中拉出,并向目标主机上的API发送请求。身份验证由附加到请求的发送方的加密签名管理,由目标主机上的任务服务器验证