如何联系服务器并运行程序

时间:2018-04-04 16:18:47

标签: python python-3.x server

背景

我需要在远程服务器上运行程序而无需登录服务器。服务器只允许人们联系它,而不是查看其上的文件或登录。

服务器中包含.pyPython的安装。该文件具有数据库的硬编码登录凭据,我不希望本地机器程序的用户看到它。

我想联系服务器,传递参数并请求它与它们一起运行程序。

原因是我不希望我的程序在本地计算机上存储服务器的登录凭据,因此我不想ssh,因为这将再次需要某种形式的本地化凭证,在某些时候向用户公开的凭证(我从不希望他们看到它们)。

传统上,当我进行远程机器调用时,它通过requestshttp.client库访问公开的API;根据我的发现,这可能需要socket库,这是一个我不太熟悉的库,似乎无法找到我想要做的例子。

服务器代码:

import sys
from pymongo import MongoClient

usr = 'user_login'
pwd = 'user_pass'

client = MongoClient('mongodb://' + usr + ':' + pwd +'@host:port')
db = client['some_db']
db.add_user(sys.argv[1], sys.argv[2])

问题(S):

  1. 如何向包含脚本文件的服务器执行单向请求并将其传递给参数?
  2. 这是处理确保用户无法看到管理员凭据的合适方式吗?
  3. 问题2在某种程度上超出了范围,因为底层问题是程序需要在数据库上创建新的用户帐户,但您必须使用授权帐户登录才能执行此操作。如果我将凭证硬编码或存储在本地机器可以看到的文件中,那么精明的用户可以调试程序并查看它们是什么。

    我想把它们放在没有人能看到文件的服务器上,只要求服务器运行它们,这将是一个安全的选择并确保安全。

2 个答案:

答案 0 :(得分:0)

您需要的似乎是典型的HTTP端点。需要阅读和考虑的事项:

  • 最简单的网络框架,例如web.py。或者,您可以将程序作为CGI script运行,无论语言如何。
  • 一个配置文件,用于保存mongodb admin用户的凭据。每次你的程序运行时Read it
  • 最难的部分:在您的脚本之上一个适当的授权层。否则任何人都可以运行它。至少,基本的http auth或令牌承载认证。
  • 除非它位于您内置加密的小型私有可信VPN内,否则通过HTTPS为您的终端提供服务。因为无论如何它都将由Web服务器提供(作为传递 - 通过,或通过uwsgi),只是使用你的网络服务器已经做HTTPS(和it does,对吗?)的事实。

答案 1 :(得分:0)

一个简单的例子

from flask import Flask, request
app = Flask(__name__)

@app.route("/adduser")
def hello():
  user = request.args.get("user")
  pwd = request.args.get("pwd")

  client = MongoClient('mongodb://' + usr + ':' + pwd +'@host:port')
  db = client['some_db']
  db.add_user(user, pwd)
  return "user inserted"

if __name__ == '__main__':
  app.run()

并发出以下请求http://localhost:5000/adduser?user=root&pwd=1234

最重要的是你可以使用POST over SSL(HTTPS),这样数据就会被加密并在请求体中传输,而不是url(比如GET)这个就足够了,安全明智