53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
import mitogen
|
|
import mitogen.service
|
|
|
|
|
|
class FileService(mitogen.service.Service):
|
|
"""
|
|
Simple file server, for demonstration purposes only! Use of this in
|
|
real code would be a security vulnerability as it would permit children
|
|
to read any file from the master's disk.
|
|
"""
|
|
|
|
@mitogen.service.expose(policy=mitogen.service.AllowAny())
|
|
@mitogen.service.arg_spec(spec={
|
|
'path': str
|
|
})
|
|
def read_file(self, path):
|
|
with open(path, 'rb') as fp:
|
|
return fp.read()
|
|
|
|
|
|
def download_file(source_context, path):
|
|
s = source_context.call_service(
|
|
service_name=FileService, # may also be string 'pkg.mod.FileService'
|
|
method_name='read_file',
|
|
path=path,
|
|
)
|
|
|
|
with open(path, 'w') as fp:
|
|
fp.write(s)
|
|
|
|
|
|
def download_some_files(source_context, paths):
|
|
for path in paths:
|
|
download_file(source_context, path)
|
|
|
|
|
|
@mitogen.main()
|
|
def main(router):
|
|
pool = mitogen.service.Pool(router, services=[
|
|
FileService(router),
|
|
])
|
|
|
|
remote = router.ssh(hostname='k3')
|
|
remote.call(download_some_files,
|
|
source_context=router.myself(),
|
|
paths=[
|
|
'/etc/passwd',
|
|
'/etc/hosts',
|
|
]
|
|
)
|
|
pool.stop()
|
|
|