13 Commits

Author SHA1 Message Date
3e7f23ccd1 Removing trailing spaces No 7 >:( 2018-04-04 17:20:17 +02:00
abf6a0f563 Removing trailing spaces No 6 2018-04-04 17:06:35 +02:00
6687604446 Removing trailing spaces No 5 2018-04-04 16:59:19 +02:00
1a3e532b29 Removing trailing spaces No 4 2018-04-04 16:51:26 +02:00
36dd610965 Merge branch 'master' of github.com:Bandie/ding 2018-04-04 16:44:39 +02:00
2141418097 Removing trailing whitespaces No 3 2018-04-04 16:44:09 +02:00
6d24484430 Merge pull request #4 from Bandie/preMerge
Removing trailing whitespaces No 2
2018-04-04 16:40:22 +02:00
9b03d6f928 Removing trailing whitespaces No 2 2018-04-04 16:39:23 +02:00
dc027362f0 Merge pull request #3 from Bandie/preMerge
Removing trailing whitespaces
2018-04-04 16:34:27 +02:00
406accc716 Removing trailing whitespaces 2018-04-04 16:33:36 +02:00
72c68cabde Merge pull request #2 from Bandie/preMerge
Improvement™
2018-04-04 16:26:08 +02:00
a7d27c5ee9 Improvement™ 2018-04-04 16:24:52 +02:00
600524809c Renaming 2018-03-29 00:58:36 +02:00
9 changed files with 69 additions and 59 deletions

View File

@ -1,28 +1,28 @@
#!/bin/bash #!/bin/bash
## Server private key ## Server private key
echo -n "Where to save your server's key file? ($PWD/ding_server.key): " echo -n "Where to save your server's key file? ($PWD/dingd.key): "
read temp read temp
if [ -n "$temp" ] if [ -n "$temp" ]
then then
save=$temp save=$temp
else else
save="$PWD/ding_server.key" save="$PWD/dingd.key"
fi fi
key=$save key=$save
openssl genrsa -out $save 4096 openssl genrsa -out $save 4096
## CSR ## CSR
echo -n "Where to save your Certificate Signing Request (CSR)? ($PWD/ding_server.csr): " echo -n "Where to save your Certificate Signing Request (CSR)? ($PWD/dingd.csr): "
read temp read temp
if [ -n "$temp" ] if [ -n "$temp" ]
then then
save=$temp save=$temp
else else
save="$PWD/ding_server.csr" save="$PWD/dingd.csr"
fi fi
csr=$save csr=$save
echo -e "\033[01;33mPlease enter some information. THEY MUST BE DIFFERENT FROM THE CA's INFORMATION.\033[00m" echo -e "\033[01;33mPlease enter some information. THEY MUST BE DIFFERENT FROM THE CA's INFORMATION.\033[00m"
@ -50,14 +50,14 @@ else
loadCAkey="$PWD/CA.key" loadCAkey="$PWD/CA.key"
fi fi
echo -n "Where to save your signed server certificate? ($PWD/ding_server.crt): " echo -n "Where to save your signed server certificate? ($PWD/dingd.crt): "
read temp read temp
if [ -n "$temp" ] if [ -n "$temp" ]
then then
save=$temp save=$temp
else else
save="$PWD/ding_server.crt" save="$PWD/dingd.crt"
fi fi
echo -n "How many days should the certificate be valid? (365): " echo -n "How many days should the certificate be valid? (365): "

View File

@ -1,28 +1,28 @@
#!/bin/bash #!/bin/bash
## Server private key ## Server private key
echo -n "Where to save your client's key file? ($PWD/ding_client.key): " echo -n "Where to save your client's key file? ($PWD/ding.key): "
read temp read temp
if [ -n "$temp" ] if [ -n "$temp" ]
then then
save=$temp save=$temp
else else
save="$PWD/ding_client.key" save="$PWD/ding.key"
fi fi
key=$save key=$save
openssl genrsa -out $save 4096 openssl genrsa -out $save 4096
## CSR ## CSR
echo -n "Where to save your Certificate Signing Request (CSR)? ($PWD/ding_client.csr): " echo -n "Where to save your Certificate Signing Request (CSR)? ($PWD/ding.csr): "
read temp read temp
if [ -n "$temp" ] if [ -n "$temp" ]
then then
save=$temp save=$temp
else else
save="$PWD/ding_client.csr" save="$PWD/ding.csr"
fi fi
csr=$save csr=$save
echo -e "\033[01;33mPlease enter some information. THEY MUST BE DIFFERENT FROM THE CA's AND SERVER's INFORMATION.\033[00m" echo -e "\033[01;33mPlease enter some information. THEY MUST BE DIFFERENT FROM THE CA's AND SERVER's INFORMATION.\033[00m"
@ -50,14 +50,14 @@ else
loadCAkey="$PWD/CA.key" loadCAkey="$PWD/CA.key"
fi fi
echo -n "Where to save your signed client certificate? ($PWD/ding_client.crt): " echo -n "Where to save your signed client certificate? ($PWD/ding.crt): "
read temp read temp
if [ -n "$temp" ] if [ -n "$temp" ]
then then
save=$temp save=$temp
else else
save="$PWD/ding_client.crt" save="$PWD/ding.crt"
fi fi
echo -n "How many days should the certificate be valid? (365): " echo -n "How many days should the certificate be valid? (365): "

View File

@ -28,12 +28,12 @@ Step 1 to 3 can only be run on UNIX or GNU/Linux.
1. Run `./1_generateCA.sh` to generate a CA. 1. Run `./1_generateCA.sh` to generate a CA.
2. Run `./2_generateServCert.sh` to generate a signed Server Certificate. 2. Run `./2_generateServCert.sh` to generate a signed Server Certificate.
3. Run `./3_generateClientCert.sh` to generate a signed Client Certificate. 3. Run `./3_generateClientCert.sh` to generate a signed Client Certificate.
4. Move `ding_client`, `ding_client.cfg`, `ding_client.crt`, `ding_client.key` and `CA.crt` to the computer which should be able to send commands to the server. 4. Move `ding`, `ding.cfg`, `ding.crt`, `ding.key` and `CA.crt` to the computer which should be able to send commands to the server.
* UNIX or GNU/Linux: Also move `ding_client.cfg` to that computer. * UNIX or GNU/Linux: Also move `ding.cfg` to that computer.
* Windows: Also move `ding_client.win.cfg` to that computer. * Windows: Also move `ding.win.cfg` to that computer.
5. Do some configuration on the server and client (`ding_server.cfg`, `ding_client.cfg` or `ding_server.win.cfg`, `ding_client.win.cfg` on Windows). 5. Do some configuration on the server and client (`dingd.cfg`, `ding.cfg` or `dingd.win.cfg`, `ding.win.cfg` on Windows).
6. Start the server using `./ding_server` or `python .\ding_server` on Windows. (You may want to put this in a tmux session. [Ctrl+B, D] ;) ). 6. Start the server using `./dingd` or `python .\dingd` on Windows. (You may want to put this in a tmux session. [Ctrl+B, D] ;) ).
7. Try out the client using `./ding_client <command>` òr `python .\ding_client <command>` on Windows. 7. Try out the client using `./ding <command>` òr `python .\ding <command>` on Windows.
## Optional: Cleartext password with timeout ## Optional: Cleartext password with timeout
@ -45,9 +45,9 @@ You might want to do something like `$ history -c` after sending the password vi
### How to enable the password ### How to enable the password
1. Open your `ding_server.cfg` or `ding_server.win.cfg`. 1. Open your `dingd.cfg` or `dingd.win.cfg`.
2. Set `pw_on=true`. 2. Set `pw_on=true`.
3. Set a password, like `password=abc def`. 3. Set a password, like `password=abc def`.
4. Set a password timeout: `pwtimeout=10` for 10 seconds. 4. Set a password timeout: `pwtimeout=10` for 10 seconds.
If you have a password with special characters as in spaces and the like, you may want to use quotation marks around your password. `./ding_client "abc def"` or `python .\ding_client "abc def"` on Windows. If you have a password with special characters as in spaces and the like, you may want to use quotation marks around your password. `./ding "abc def"` or `python .\ding "abc def"` on Windows.

View File

@ -7,22 +7,25 @@ import sys, ssl, socket, os
import configparser import configparser
global exitcode host = None
port = 0
cafile = None
certfile = None
keyfile = None
exitcode = 1 exitcode = 1
def readConfig(): def readConfig():
if(os.name == 'nt'): if(os.name == 'nt'):
CONFIG = "ding_client.win.cfg" CONFIG = "ding.win.cfg"
else: else:
CONFIG = "ding_client.cfg" CONFIG = "ding.cfg"
cfg = configparser.SafeConfigParser() cfg = configparser.SafeConfigParser()
try: try:
cfg.read(CONFIG) cfg.read(CONFIG)
global host, port, cafile, certfile, keyfile global host, port, cafile, certfile, keyfile
host = cfg.get("Client", "host") host = cfg.get("Client", "host")
port = int(cfg.get("Client", "port")) port = int(cfg.get("Client", "port"))
@ -30,7 +33,7 @@ def readConfig():
certfile = cfg.get("Client", "certfile") certfile = cfg.get("Client", "certfile")
keyfile = cfg.get("Client", "keyfile") keyfile = cfg.get("Client", "keyfile")
except configparser.NoSectionError: except configparser.NoSectionError:
print("No suitable config found. Expecting some config in", CONFIG) print("No suitable config found. Expecting some config in", CONFIG, file=sys.stderr)
quit(3) quit(3)
@ -47,10 +50,10 @@ def send(conn, cmd):
print("Error. Server said: The command isn't set on the server.", file=sys.stderr) print("Error. Server said: The command isn't set on the server.", file=sys.stderr)
exitcode = 1 exitcode = 1
elif(buf == b"ERR CMD_ERR"): elif(buf == b"ERR CMD_ERR"):
print("Error. Server said: The command doesn't work because the file doesn't exist on the server.") print("Error. Server said: The command doesn't work because the file doesn't exist on the server.", file=sys.stderr)
exitcode = 2 exitcode = 2
elif(buf == b"ERR PW"): elif(buf == b"ERR PW"):
print("Error. Password required. The password was wrong.") print("Error. Password required. The password was wrong.", file=sys.stderr)
exitcode = 4 exitcode = 4
elif(b"OK PW" in buf): elif(b"OK PW" in buf):
bufr=str(buf.decode('utf-8')) bufr=str(buf.decode('utf-8'))
@ -61,7 +64,7 @@ def send(conn, cmd):
print("The server seems to be crazy. Nothing sent.", file=sys.stderr) print("The server seems to be crazy. Nothing sent.", file=sys.stderr)
conn.close() conn.close()
quit(exitcode)
def main(): def main():

View File

@ -5,6 +5,6 @@ port=13573
cafile=CA.crt cafile=CA.crt
#Client Certificate/key signed by the CA above #Client Certificate/key signed by the CA above
certfile=ding_client.crt certfile=ding.crt
keyfile=ding_client.key keyfile=ding.key

View File

@ -5,6 +5,6 @@ port=13573
cafile=CA.crt cafile=CA.crt
#Client Certificate/key signed by the CA above #Client Certificate/key signed by the CA above
certfile=ding_client.crt certfile=ding.crt
keyfile=ding_client.key keyfile=ding.key

View File

@ -3,9 +3,23 @@
# Author: Bandie Canis # Author: Bandie Canis
# License: 2-Clause BSD license # License: 2-Clause BSD license
import ssl, socket, subprocess, time, os import ssl, socket, subprocess, time, os, sys
import configparser import configparser
CONFIG = None
host = None
port = 0
cafile = None
certfile = None
keyfile = None
pw_on = None
password = None
pwtimeout = 30
tmppw_on = None
context = None
bindsocket = None
def getTimestamp(): def getTimestamp():
t = "[" + time.strftime("%Y-%m-%d %H:%M:%S") + "]" t = "[" + time.strftime("%Y-%m-%d %H:%M:%S") + "]"
@ -21,7 +35,6 @@ def execFromConfig(option, pw=False):
else: else:
return 5 return 5
else: else:
try: try:
@ -39,8 +52,6 @@ def execFromConfig(option, pw=False):
print(getTimestamp(), "No execution set:", option) print(getTimestamp(), "No execution set:", option)
return 1 return 1
def main(): def main():
while True: while True:
newsocket, fromaddr = bindsocket.accept() newsocket, fromaddr = bindsocket.accept()
@ -68,8 +79,6 @@ def main():
print(getTimestamp(), "Connection reset.") print(getTimestamp(), "Connection reset.")
serve() serve()
if(tmppw_on): if(tmppw_on):
retval = execFromConfig(buf, True) retval = execFromConfig(buf, True)
if(retval == 5): if(retval == 5):
@ -92,7 +101,6 @@ def main():
elif(retval == 2): elif(retval == 2):
connstream.send(b"ERR CMD_ERR") connstream.send(b"ERR CMD_ERR")
except ssl.SSLError as e: except ssl.SSLError as e:
print(getTimestamp(), e) print(getTimestamp(), e)
@ -104,9 +112,9 @@ def init():
global CONFIG, host, port, cafile, certfile, keyfile, pw_on, password, pwtimeout, tmppw_on, context, bindsocket global CONFIG, host, port, cafile, certfile, keyfile, pw_on, password, pwtimeout, tmppw_on, context, bindsocket
if(os.name == 'nt'): if(os.name == 'nt'):
CONFIG = "ding_server.win.cfg" CONFIG = "dingd.win.cfg"
else: else:
CONFIG = "ding_server.cfg" CONFIG = "dingd.cfg"
cfg = configparser.SafeConfigParser() cfg = configparser.SafeConfigParser()
cfg.read(CONFIG) cfg.read(CONFIG)
@ -125,11 +133,10 @@ def init():
else: else:
pw_on = False pw_on = False
tmppw_on=pw_on tmppw_on=pw_on
except configparser.NoOptionError as e: except configparser.NoSectionError as e:
print("Error in configuration file:", e) print("Error in configuration file:", e, file=sys.stderr)
quit(1) quit(1)
try: try:
context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile=cafile) context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH, cafile=cafile)
context.load_cert_chain(certfile=certfile, keyfile=keyfile) context.load_cert_chain(certfile=certfile, keyfile=keyfile)
@ -156,7 +163,7 @@ def init():
print("Error: Can't bind for port number ", port, ". Permission denied.", sep="") print("Error: Can't bind for port number ", port, ". Permission denied.", sep="")
quit(1) quit(1)
print("Running ding server on ", host, ":", port, print("Running dingd on ", host, ":", port,
"\nConfig: ", CONFIG, "\nConfig: ", CONFIG,
"\nCAFile: ", cafile, "\nCAFile: ", cafile,
"\nCertfile: ", certfile, "\nCertfile: ", certfile,

View File

@ -7,10 +7,10 @@ port=13573
cafile=CA.crt cafile=CA.crt
# Server's certificate [signed by the CA above] # Server's certificate [signed by the CA above]
certfile=ding_server.crt certfile=dingd.crt
# Server's private key # Server's private key
keyfile=ding_server.key keyfile=dingd.key
## Optional cleartext password ## Optional cleartext password
# To unlock the commands you need to send the password before sending the command. # To unlock the commands you need to send the password before sending the command.

View File

@ -7,10 +7,10 @@ port=13573
cafile=CA.crt cafile=CA.crt
# Server's certificate [signed by the CA above] # Server's certificate [signed by the CA above]
certfile=ding_server.crt certfile=dingd.crt
# Server's private key # Server's private key
keyfile=ding_server.key keyfile=dingd.key
## Optional cleartext password ## Optional cleartext password
# To unlock the commands you need to send the password before sending the command. # To unlock the commands you need to send the password before sending the command.