起因
服務器爲內部服務器,從本機沒有直連渠道,只能基於novnc web管理,與本地之間無法互傳文件。
思路
從本地啓動臨時http服務,可以通過命令行上傳,下載文件,可以限制非服務器IP無法連接。
本地臨時http代碼
1、share.py (將服務器公網出口IP填入ALLOWED_IPS )
import http.server
import socketserver
import os
from http import HTTPStatus
import cgi
# 指定允許的IP地址
ALLOWED_IPS = ['192.168.1.2', '192.168.2.66'] # 請替換爲實際的IP地址
class CustomHTTPRequestHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
# 檢查客戶端IP是否在允許列表中
if self.client_address[0] in ALLOWED_IPS:
super().do_GET()
else:
self.send_error(HTTPStatus.FORBIDDEN, "Access denied")
def do_POST(self):
# 檢查客戶端IP
if self.client_address[0] in ALLOWED_IPS:
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD': 'POST'}
)
filename = form['file'].filename
file_data = form['file'].file.read()
with open(filename, 'wb') as f:
f.write(file_data)
self.send_response(HTTPStatus.OK)
self.end_headers()
self.wfile.write(b"File uploaded successfully")
else:
self.send_error(HTTPStatus.FORBIDDEN, "Access denied")
def run(server_class=http.server.HTTPServer, handler_class=CustomHTTPRequestHandler):
server_address = ('', 1234)
httpd = server_class(server_address, handler_class)
print("Starting httpd server on port 1234")
httpd.serve_forever()
if __name__ == "__main__":
run()
2、share.bat
@echo off
setlocal
cd %USERPROFILE%\Desktop
if not exist share (
mkdir share
)
cd %USERPROFILE%\Desktop\share
cmd /k "python share.py"
endlocal
服務器臨時下載上傳文件
1、下載文件命令
wget http://xxxx.com:1234/a.zip
2、上傳文件命令,其中/path/to/file爲要上傳的文件路徑,可以是相對路徑,注意:服務器上已存在同名文件會覆蓋。
curl -X POST -F "file=@/path/to/file" http://xxxx.com:1234