webssh/README.rst

174 lines
4.4 KiB
ReStructuredText
Raw Normal View History

2018-04-26 17:11:16 +00:00
WebSSH
------
2018-04-27 00:44:22 +00:00
|Build Status| |codecov| |PyPI - Python Version| |PyPI|
2018-04-26 17:11:16 +00:00
2018-08-20 15:09:09 +00:00
Introduction
------------
2018-04-26 17:11:16 +00:00
A simple web application to be used as an ssh client to connect to your
2018-08-29 15:12:21 +00:00
ssh servers. It is written in Python, base on tornado, paramiko and
xterm.js.
2018-04-26 17:11:16 +00:00
Features
2018-08-20 15:09:09 +00:00
--------
2018-04-26 17:11:16 +00:00
- SSH password authentication supported, including empty password.
- SSH public-key authentication supported, including DSA RSA ECDSA
Ed25519 keys.
- Encrypted keys supported.
- Fullscreen terminal supported.
- Terminal window resizable.
2018-08-20 15:09:09 +00:00
- Auto detect the ssh server's default encoding.
2018-09-15 01:46:40 +00:00
- Modern browsers including Chrome, Firefox, Safari, Edge, Opera
supported.
2018-08-20 15:09:09 +00:00
Preview
-------
|Login| |Terminal|
2018-09-01 03:20:31 +00:00
How it works
~~~~~~~~~~~~
::
+---------+ http +--------+ ssh +-----------+
| browser | <==========> | webssh | <=======> | ssh server|
+---------+ websocket +--------+ ssh +-----------+
2018-08-29 15:12:21 +00:00
Requirements
~~~~~~~~~~~~
2018-08-20 15:09:09 +00:00
- Python 2.7/3.4+
2018-04-26 17:11:16 +00:00
2018-08-29 15:12:21 +00:00
Quickstart
~~~~~~~~~~
2018-08-29 23:18:34 +00:00
1. Install this app, run command ``pip install webssh``
2. Start a webserver, run command ``wssh``
2018-08-29 15:12:21 +00:00
3. Open your browser, navigate to ``127.0.0.1:8888``
4. Input your data, submit the form.
Server options
~~~~~~~~~~~~~~
.. code:: bash
2018-10-19 10:55:20 +00:00
# start a http server with specified listen address and listen port
2018-10-22 13:51:51 +00:00
wssh --address='2.2.2.2' --port=8000
2018-04-26 17:11:16 +00:00
2018-10-22 13:51:51 +00:00
# start a https server, certfile and keyfile must be passed
wssh --certfile='/path/to/cert.crt' --keyfile='/path/to/cert.key'
2018-10-19 10:55:20 +00:00
2018-08-10 05:45:01 +00:00
# missing host key policy
2018-04-26 17:11:16 +00:00
wssh --policy=reject
2018-08-10 05:45:01 +00:00
# logging level
2018-04-26 17:11:16 +00:00
wssh --logging=debug
# log to file
wssh --log-file-prefix=main.log
# more options
wssh --help
2018-08-29 15:12:21 +00:00
Use console
~~~~~~~~~~~
.. code:: javascript
// connect to your ssh server
wssh.connect(hostname, port, username, password, privatekey);
2018-09-09 07:41:28 +00:00
// pass an object to wssh.connect
2018-08-29 15:12:21 +00:00
var opts = {
hostname: 'hostname',
port: 'port',
username: 'username',
password: 'password',
privatekey: 'the private key text'
};
wssh.connect(opts);
2018-09-01 03:20:31 +00:00
// without an argument, wssh will use the form data to connect
wssh.connect();
// set a new encoding for client to use
wssh.set_encoding(encoding);
// reset encoding to use the default one
wssh.reset_encoding();
2018-08-29 15:12:21 +00:00
// send a command to the server
wssh.send('ls -l');
2018-08-20 15:09:09 +00:00
Tests
~~~~~
2018-08-20 15:33:17 +00:00
Use unittest to run all tests
2018-08-20 15:09:09 +00:00
::
python -m unittest discover tests
2018-08-20 15:33:17 +00:00
Use pytest to run all tests
2018-08-20 15:09:09 +00:00
::
python -m pytest tests
2018-10-22 13:51:51 +00:00
Deployment
~~~~~~~~~~
Running behind an Nginx server
.. code:: bash
wssh --address='127.0.0.1' --port=8888 --policy=reject
2018-04-26 17:11:16 +00:00
2018-08-29 15:12:21 +00:00
.. code:: nginx
2018-04-26 17:11:16 +00:00
2018-10-22 13:51:51 +00:00
# Nginx config example
2018-04-26 17:11:16 +00:00
location / {
proxy_pass http://127.0.0.1:8888;
proxy_http_version 1.1;
proxy_read_timeout 300;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-PORT $remote_port;
}
2018-10-22 13:51:51 +00:00
Running as a standalone server
.. code:: bash
2018-10-23 06:10:10 +00:00
wssh --port=8080 --sslport=4433 --certfile='cert.crt' --keyfile='cert.key' --xheaders=False --policy=reject
2018-10-22 13:51:51 +00:00
2018-04-26 17:11:16 +00:00
Tips
2018-08-20 15:09:09 +00:00
----
2018-04-26 17:11:16 +00:00
2018-10-22 13:51:51 +00:00
- For whatever deployment choice you choose, don't forget to enable
SSL.
- If you choose running this app as a standalone server, redirecting
http to https is enabled by default, and only http requests from a
public network will be redirected.
2018-04-26 17:11:16 +00:00
- Try to use reject policy as the missing host key policy along with
your verified known\_hosts, this will prevent man-in-the-middle
attacks. The idea is that it checks the system host keys
file("~/.ssh/known\_hosts") and the application host keys
file("./known\_hosts") in order, if the ssh server's hostname is not
2018-10-23 06:10:10 +00:00
found or the key is not matched, the connection will be aborted.
2018-04-26 17:11:16 +00:00
.. |Build Status| image:: https://travis-ci.org/huashengdun/webssh.svg?branch=master
:target: https://travis-ci.org/huashengdun/webssh
.. |codecov| image:: https://codecov.io/gh/huashengdun/webssh/branch/master/graph/badge.svg
:target: https://codecov.io/gh/huashengdun/webssh
2018-04-27 00:44:22 +00:00
.. |PyPI - Python Version| image:: https://img.shields.io/pypi/pyversions/webssh.svg
.. |PyPI| image:: https://img.shields.io/pypi/v/webssh.svg
2018-04-26 17:11:16 +00:00
.. |Login| image:: https://github.com/huashengdun/webssh/raw/master/preview/login.png
.. |Terminal| image:: https://github.com/huashengdun/webssh/raw/master/preview/terminal.png