Руководство пользователя на Русском языке
Cross-platform ssh-server based chat program, with data persisted into relational databases of MySQL, PostgreSQL or Sqlite3. Public channel (with persisted messages) and private message (not stored) are supported. Application has serious custom scripting and hacking potential.
Use case - devops chat with possibility to run scripts from chat, without SSH access to server.
-
Secure SHell protocol is used to make all communications safe and secure.
-
Users' profiles and messages are stored in relational databases in easy to manipulate format, so we can use 3rd party applications to work with them.
-
Users can be authorized by passwords or private keys.
-
We can start application listening on few addresses and ports on the same time. For example, listeing on
192.168.1.2:2222
on local area network, and on193.41.32.25:27015
for uplink connections. -
Users can execute scripts defined by admin on behalf of local system user running the GoSSHa server.
-
Application can run scripts after each public or private message, with senders name, ip, message exported as environment variables. See
homedir/
folder for examples -
Application is created in
Go
language, and can be build on many environments and architectures -Linux
,Microsoft Windows
,MacOs
.
Firstly, you can create admin account by calling $ gossha root [username]
[vodolaz095@rhel ~]$ gossha root admin
____ ____ ____ _ _
/ ___| ___/ ___/ ___|| | | | __ _
| | _ / _ \___ \___ \| |_| |/ _` |
| |_| | (_) |__) |__) | _ | (_| |
\____|\___/____/____/|_| |_|\__,_|
Persistent SSH based chat for the ones, who cares.
Build: 1.24.1.b06789e.Linux.x86_64
Version: Build #b06789e on rhel.Linux.x86_64 on Sun Jun 28 01:10:39 MSK 2015
Console commands avaible:
$ gossha ban [username] - delete user and all his/her messages
$ gossha passwd [username] - create/update ordinary user by name and password
$ gossha root [username] - create/update root user by name and password
Empty argument - start in server mode
Enter password:
User admin is created and/or new password is set!
Than you can login using any of SSH clients
For example, like this
$ ssh admin@localhost -p 27015
Than you can import you private ssh key to be used instead of password by using
the \k
command.
[vodolaz095@rhel ~]$ ssh admin@localhost -p 27015
Host key fingerprint is 3d:63:45:c4:82:03:ca:99:80:49:03:8e:f2:d8:3a:bb
+--[ RSA 2048]----+
|+=. .. . oo |
|= .o + o ... |
|o. = . .. |
|.+ . . |
|. o S = |
| . . o |
|o |
| o |
|E. |
+-----------------+
admin@localhost's password:
GoSSHa - very secure chat.
Build #1.24.1.b06789e.Linux.x86_64
Version: Build #b06789e on rhel.Linux.x86_64 on Sun Jun 28 01:10:39 MSK 2015
Commands avaible:
\b - (B)an user (you need to have `root` permissions!)
\e - Close current session
\exit - Close current session
\f - (F)orgot localy available SSH key used for authorising your logins via this client
\h - (H)elp, show this screen
\i - Print (I)nformation about yourself
\k - Use locally available SSH (K)eys to authorise your logins on this server
\passwd - Changes current user password
\q - Close current session
\quit - Close current session
\r - (R)egister new user (you need to have `root` permissions!)
\rr - (R)egister new (r)oot user (you need to have `root` permissions!)
\w - List users, (W)ho are active on this server
\x - E(X)ecutes custom user script from home directory
all other input is treated as message, that you send to server
[[email protected](127.0.0.1) x]{14:14:56}:hello!!!
[[email protected](127.0.0.1) *]{02:24:04}:\k
Importing public key...
Key imported succesefully!
[[email protected](127.0.0.1) *]{02:24:04}:
Ordinary messages are colored in white
, system messages - green
, private
messages - blue
.
To send private message, type @
, than username (TAB
autocompletion works) to
whom you want to send private message of the record. Private messages are not
stored in the database, and they disapear, when user logouts and logins.
Application can be configured in few wayes (ordered by priority).
-
By starting application with flags defined.
-
By environment variables
-
By JSON object values in config file loaded from
/etc/gossha/gossha.json
-
By JSON object values in config file loaded from
$HOME/.gossha/gossha.json
This is example config file provided with application:
# Automatically generated config file for GoSSHa - SSH powered chat
# Place it either in
# /etc/gossha/gossha.toml
# or
# ~/.gossha/gossha.toml
#
# Enable debug
Debug=true
# On what port to listen for all interfaces (like for 0.0.0.0 address)
Port = 27015
# What addresses to bind to
BindTo = ["127.0.0.1:27014"]
#Setting database connection - various possible combinations are shown
#SQLite3 with database in local file
#Driver = "sqlite3"
#ConnectionString = "/home/vodolaz095/.gossha/gossha.db"
#SQLite3 with database in memory
#Driver = "sqlite3"
#ConnectionString = ":memory:"
#MySQL database
#Driver = "mysql"
#ConnectionString = "username:password@hostname/database?charset=utf8&parseTime=True&loc=Local"
#PostgreSQL database. 1st variant
#Driver = "postgres"
#ConnectionString ="user=gorm dbname=gorm sslmode=disable"
#PostgreSQL database. 2nd variant
#Driver="postgres"
#ConnectionString="postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full")"
#This database connection setting are being used
Driver = "sqlite3"
ConnectionString = "/home/vodolaz095/.gossha/gossha.db"
#Path to SSH Public key
SshPublicKeyPath = "/home/vodolaz095/.ssh/id_rsa.pub"
#Path to SSH Private key
SshPrivateKeyPath = "/home/vodolaz095/.ssh/id_rsa"
#Directory to search for custom scripts
Homedir = "/home/vodolaz095/.gossha"
#Script to be executed on each message
ExecuteOnMessage=""
#Script to be execute on each private message
ExecuteOnPrivateMessage=""
Port (integer) for application to listein on 0.0.0.0
address (all interfaces). The
default value is 27015
, it can be via GOSSHA_PORT=27015
environment value.
Debug (boolean) toggle mode with usage of more verbose output to stdout and start pprof
server on http://localhost:6060 port for debugging/benchmarking purposes.
Can be enabled by GOSSHA_DEBUG=true
environment value.
Driver and connectionString sets the connection to database.
We can use sqlite3,
MySQL (MariaDB
in compatibility mode),
PostgreSQL databases via appropriate drivers.
Possible pairs of values are
--driver=sqlite3 --connectionString=/var/lib/gossha/gossha.db
--driver=sqlite3 --connectionString=:memory:
--driver=mysql --connectionString='user:password@/dbname?charset=utf8&parseTime=True&loc=Local'
--driver=postgres --connectionString='user=gorm dbname=gorm sslmode=disable'
--driver=postgres --connectionString='postgres://pqgotest:password@localhost/pqgotest?sslmode=verify-full'
by default, the sqlite3
driver is used with database stored at $HOME/.gossha/gossha.db
.
We can load driver
from GOSSHA_DRIVER=sqlite3
environment value and load connectionString
from GOSSHA_CONNECTIONSTRING=:memory:
environment value
SshPublicKeyPath points to Public Key to be used by SSH server, default value is $HOME/.ssh/id_rsa.pub
.
Can be set via GOSSHA_SSHPUBLICKEYPATH=/home/myusername/.ssh/id_rsa.pub
environment value.
sshPrivateKeyPath points to Private Key to be used by SSH server, default value is $HOME/.ssh/id_rsa.pub
.
Can be set via GOSSHA_SSHPRIVATEKEYPATH=/home/myusername/.ssh/id_rsa
environment value.
Homedir is path to directory containing user's scripts to be executed via \x
command in chat. It is worth notice,
that this scripts have to be executable files, like the examples, provided in homedir/scripts
directory of
the distribution or repo. The username, ip and other data is populated from environment values used for scripts.
We can make this executable files in any language - shell, binaries, nodejs files, php scripts.
Can be set by GOSSHA_HOMEDIR=/home/myusername/.gossha
environment value.
executeOnMessage is path to executable to be started on each message.
We can make this executable files in any language - shell, binaries, nodejs files, php scripts.
See homedir/afterMessage
for shell example.
Can be set via GOSSHA_EXECUTEAFTERMESSAGE=/home/myusername/.gossha/afterMessage
environment value.
executeOnPrivateMessage is path to executable to be started on each message.
We can make this executable files in any language - shell, binaries, nodejs files, php scripts.
See homedir/afterPrivateMessage
for shell example.
Can be set by means of GOSSHA_EXECUTEAFTERPRIVATEMESSAGE=/home/myusername/.gossha/afterPrivateMessage
environment value.
I assume you have one of popular Linux
distros, i don't care about other OSes.
-
Install Go language and it's environment properly. At least
1.4.2
version. -
Verify you have GNU Make at least of 4.0 version.
-
Clone code from repository in appropriate place
$ go get github.com/vodolaz095/gossha
- Try to build
$ go get $GOPATH/github.com/vodolaz095/gossha
$ make
The binary file will be created in build/gossha
- Try to install globaly (root password will be asked!)
$ make install
This step results in binary generated and placed in /usr/bin/gossha
.
Also you can uninstall binaries by (root password will be asked!)
$ make uninstall
- By default, when you run the application first time, the directory
with databases, configs and scripts will be created in
$HOME/.gossha/
You can get compiled binaries from here https://github.com/vodolaz095/gossha/releases
You can verify the signatures via GPG
or GPG2
. It have to be something like this:
[vodolaz095@vodolaz095 build]$ gpg2 --verify md5sum.txt.sig md5sum.txt
gpg: Signature made Mon 29 Jun 2015 02:44:13 AM MSK using RSA key ID 994C6375
gpg: Good signature from "Anatoliy Ostroumov <[email protected]>" [ultimate]
gpg: aka "[jpeg image of size 2756]" [ultimate]
gpg: aka "[jpeg image of size 3725]" [ultimate]
with RSA key ID of 994C6375
!
The MIT License (MIT)
Copyright (c) 2015 Ostroumov Anatolij ostroumov095(at)gmail(dot)com et al.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.