It leverages docker to automatically do
- create a new ubuntu container for user, the current supported ubuntu base images are
- ubuntu 16.04
- setup a default password located in user's
$HOME/.defpsd
- setup a ssh login welcome message
It supports docker
for normal docker creation and nvidia-docker
for gpu docker creation.
The dockerfile for nvidia based gpu could be found here
@[https://gitlab.com/nvidia/cuda].
You can specify a customized dockerfile
with first line beginning with FROM ubuntu:<supported ubuntu version>
.
- Server Side
- The Linux server should have docker installed
- Client Side
- The client should have
~/.ssh/config
configured - The client should have
paramiko
package installed
- The client should have
Download the source, uncompress it and enter the source directory. Run the following command to install
pip3 install sshmgr
➜ sshmgr (master) ✗ sshmgr -h
usage: sshmgr [-h] [-v] [--hosts [hosts]] [--sshkey path_of_the_new_ssh_key]
{docker} ...
A powerful linux server manager
positional arguments:
{docker}
optional arguments:
-h, --help show this help message and exit
-v, --version Show the version of sshmgr
--hosts [hosts] The host(s) to be operated on
--sshkey path_of_the_new_ssh_key
Update ssh key for administrator
More about --hosts
. You can process multiple hosts in one command, if the
host name
-
case that beginning with
@
It indicates a file that contains multiple host ID, one ID holds one line. For example,
@$HOME/Downloads/hostids
.Empty lines will be ignored and lines begin with
#
will be regarded as comments. -
case that beginning with
/
The hosts are seperated by comma, for example
/tom, nancy, louis
. -
case that a normal host
A single host name you want to connect to.
sshmgr --hosts <hosts> docker [-h]
(--new username | --delete username | --query username | --list)
[--fdocker dockerfile] [--nvidia]
[--apt {ubuntu.16.04.offical,ubuntu.16.04.tsinghua}]
[--himsg hello_message]
optional arguments:
-h, --help show this help message and exit
--new username The user to add
--delete username The user to delete
--query username Query the information of username
--list List all users in the host.
--fdocker dockerfile The file path to dockerfile, the first line of the
file must be `FROM ubuntu:16.04`
--nvidia Enable gpu based nvidia docker
--apt {ubuntu.16.04.offical,ubuntu.16.04.tsinghua}
Select apt source.list, the default is
ubuntu.16.04.offical
--himsg hello_message
Messages showed after your guest logined into the
server
sshmgr will connect to your specified host and create a docker container for
your guest, create a $HOME/share
folder shared between the user on host and the
user on the container.
Retrieve server information:
sshmger --hosts <hosts> info [-h]
[--net Network]
[--factory Manufacturer]
[--cpu CPU]
[--mem Memory]
[--disk Disk]
An example is showed as below:
"102": {
"info": {
"net": {
"verbose": [
"2: enp2s0f0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000\n",
" inet 192.168.100.102/24 brd 192.168.100.255 scope global enp2s0f0\n"
]
},
"factory": {
"verbose": [
"\tManufacturer: xxx\n",
"\tProduct Name: xxx V3\n",
"\tSerial Number: xxx\n"
],
"Manufacturer": "xxx",
"Product Name": "xxx V3",
"Serial Number": "xxx"
},
"cpu": {
"verbose": [
"\tSocket Designation: CPU01\n",
"\tVersion: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz\n",
"\tCore Count: 8\n",
"\tThread Count: 16\n",
"\tSocket Designation: CPU02\n",
"\tVersion: Intel(R) Xeon(R) CPU E5-2630 v3 @ 2.40GHz\n",
"\tCore Count: 8\n",
"\tThread Count: 16\n"
],
"logic_core_count": 32
},
"mem": {
"verbose": [
" total used free shared buff/cache available\n",
"Mem: 131626576 577188 130605988 9304 443400 130449412\n",
"Swap: 133803004 0 133803004\n",
"\tMaximum Capacity: 2 TB\n"
],
"total": 131626576
},
"disk": {
"verbose": [
"Disk /dev/sda: 1198GB\n"
],
"size": 1286342705152
}
},
"errmsg": null,
"status": false
}
Both memory and disk size are in bytes.
If you want to process further, for example, you want to have an overview of the
servers in cpu
, memory
, disk
, you can use the following code snippets:
#! /usr/bin/env python3
#! -*- coding:utf-8 -*-
import json
with open('sysinfo.json', 'r') as _:
sysinfo = json.load(_)
cpucnt, memsz, disksz = 0, 0, 0
for host in sysinfo.keys():
if not sysinfo[host]['islive']: continue
cpucnt += sysinfo[host]['info']['cpu']['logic_core_count']
memsz += sysinfo[host]['info']['mem']['total']
disksz += sysinfo[host]['info']['disk']['size']
print(f'[+] CPU Count: {cpucnt} Memory Size: {memsz/(1024 ** 3)} GB Disk Size: {disksz/(1024 ** 4)} TB')
Open a terminal at the project root, debug with python3 -m src <options>
.