SSH tunnels to remote server.

Overview

CircleCI AppVeyor Documentation Status coveralls version

pyversions license

Author: Pahaz

Repo: https://github.com/pahaz/sshtunnel/

Inspired by https://github.com/jmagnusson/bgtunnel, which doesn't work on Windows.

See also: https://github.com/paramiko/paramiko/blob/master/demos/forward.py

Requirements

Installation

sshtunnel is on PyPI, so simply run:

pip install sshtunnel

or

easy_install sshtunnel

or

conda install -c conda-forge sshtunnel

to have it installed in your environment.

For installing from source, clone the repo and run:

python setup.py install

Testing the package

In order to run the tests you first need tox and run:

python setup.py test

Usage scenarios

One of the typical scenarios where sshtunnel is helpful is depicted in the figure below. User may need to connect a port of a remote server (i.e. 8080) where only SSH port (usually port 22) is reachable.

----------------------------------------------------------------------

                            |
-------------+              |    +----------+
    LOCAL    |              |    |  REMOTE  | :22 SSH
    CLIENT   | <== SSH ========> |  SERVER  | :8080 web service
-------------+              |    +----------+
                            |
                         FIREWALL (only port 22 is open)

----------------------------------------------------------------------

Fig1: How to connect to a service blocked by a firewall through SSH tunnel.

If allowed by the SSH server, it is also possible to reach a private server (from the perspective of REMOTE SERVER) not directly visible from the outside (LOCAL CLIENT's perspective).

----------------------------------------------------------------------

                            |
-------------+              |    +----------+               +---------
    LOCAL    |              |    |  REMOTE  |               | PRIVATE
    CLIENT   | <== SSH ========> |  SERVER  | <== local ==> | SERVER
-------------+              |    +----------+               +---------
                            |
                         FIREWALL (only port 443 is open)

----------------------------------------------------------------------

Fig2: How to connect to PRIVATE SERVER through SSH tunnel.

Usage examples

API allows either initializing the tunnel and starting it or using a with context, which will take care of starting and stopping the tunnel:

Example 1

Code corresponding to Fig1 above follows, given remote server's address is pahaz.urfuclub.ru, password authentication and randomly assigned local bind port.

from sshtunnel import SSHTunnelForwarder

server = SSHTunnelForwarder(
    'alfa.8iq.dev',
    ssh_username="pahaz",
    ssh_password="secret",
    remote_bind_address=('127.0.0.1', 8080)
)

server.start()

print(server.local_bind_port)  # show assigned local port
# work with `SECRET SERVICE` through `server.local_bind_port`.

server.stop()

Example 2

Example of a port forwarding to a private server not directly reachable, assuming password protected pkey authentication, remote server's SSH service is listening on port 443 and that port is open in the firewall (Fig2):

import paramiko
import sshtunnel

with sshtunnel.open_tunnel(
    (REMOTE_SERVER_IP, 443),
    ssh_username="",
    ssh_pkey="/var/ssh/rsa_key",
    ssh_private_key_password="secret",
    remote_bind_address=(PRIVATE_SERVER_IP, 22),
    local_bind_address=('0.0.0.0', 10022)
) as tunnel:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect('127.0.0.1', 10022)
    # do some operations with client session
    client.close()

print('FINISH!')

Example 3

Example of a port forwarding for the Vagrant MySQL local port:

from sshtunnel import open_tunnel
from time import sleep

with open_tunnel(
    ('localhost', 2222),
    ssh_username="vagrant",
    ssh_password="vagrant",
    remote_bind_address=('127.0.0.1', 3306)
) as server:

    print(server.local_bind_port)
    while True:
        # press Ctrl-C for stopping
        sleep(1)

print('FINISH!')

Or simply using the CLI:

(bash)$ python -m sshtunnel -U vagrant -P vagrant -L :3306 -R 127.0.0.1:3306 -p 2222 localhost

Example 4

Opening an SSH session jumping over two tunnels. SSH transport and tunnels will be daemonised, which will not wait for the connections to stop at close time.

import sshtunnel
from paramiko import SSHClient


with sshtunnel.open_tunnel(
    ssh_address_or_host=('GW1_ip', 20022),
    remote_bind_address=('GW2_ip', 22),
) as tunnel1:
    print('Connection to tunnel1 (GW1_ip:GW1_port) OK...')
    with sshtunnel.open_tunnel(
        ssh_address_or_host=('localhost', tunnel1.local_bind_port),
        remote_bind_address=('target_ip', 22),
        ssh_username='GW2_user',
        ssh_password='GW2_pwd',
    ) as tunnel2:
        print('Connection to tunnel2 (GW2_ip:GW2_port) OK...')
        with SSHClient() as ssh:
            ssh.connect('localhost',
                port=tunnel2.local_bind_port,
                username='target_user',
                password='target_pwd',
            )
            ssh.exec_command(...)

CLI usage

$ sshtunnel --help
usage: sshtunnel [-h] [-U SSH_USERNAME] [-p SSH_PORT] [-P SSH_PASSWORD] -R
                 IP:PORT [IP:PORT ...] [-L [IP:PORT [IP:PORT ...]]]
                 [-k SSH_HOST_KEY] [-K KEY_FILE] [-S KEY_PASSWORD] [-t] [-v]
                 [-V] [-x IP:PORT] [-c SSH_CONFIG_FILE] [-z] [-n]
                 [-d [FOLDER [FOLDER ...]]]
                 ssh_address

Pure python ssh tunnel utils
Version 0.4.0

positional arguments:
  ssh_address           SSH server IP address (GW for SSH tunnels)
                        set with "-- ssh_address" if immediately after -R or -L

optional arguments:
  -h, --help            show this help message and exit
  -U SSH_USERNAME, --username SSH_USERNAME
                        SSH server account username
  -p SSH_PORT, --server_port SSH_PORT
                        SSH server TCP port (default: 22)
  -P SSH_PASSWORD, --password SSH_PASSWORD
                        SSH server account password
  -R IP:PORT [IP:PORT ...], --remote_bind_address IP:PORT [IP:PORT ...]
                        Remote bind address sequence: ip_1:port_1 ip_2:port_2 ... ip_n:port_n
                        Equivalent to ssh -Lxxxx:IP_ADDRESS:PORT
                        If port is omitted, defaults to 22.
                        Example: -R 10.10.10.10: 10.10.10.10:5900
  -L [IP:PORT [IP:PORT ...]], --local_bind_address [IP:PORT [IP:PORT ...]]
                        Local bind address sequence: ip_1:port_1 ip_2:port_2 ... ip_n:port_n
                        Elements may also be valid UNIX socket domains:
                        /tmp/foo.sock /tmp/bar.sock ... /tmp/baz.sock
                        Equivalent to ssh -LPORT:xxxxxxxxx:xxxx, being the local IP address optional.
                        By default it will listen in all interfaces (0.0.0.0) and choose a random port.
                        Example: -L :40000
  -k SSH_HOST_KEY, --ssh_host_key SSH_HOST_KEY
                        Gateway's host key
  -K KEY_FILE, --private_key_file KEY_FILE
                        RSA/DSS/ECDSA private key file
  -S KEY_PASSWORD, --private_key_password KEY_PASSWORD
                        RSA/DSS/ECDSA private key password
  -t, --threaded        Allow concurrent connections to each tunnel
  -v, --verbose         Increase output verbosity (default: ERROR)
  -V, --version         Show version number and quit
  -x IP:PORT, --proxy IP:PORT
                        IP and port of SSH proxy to destination
  -c SSH_CONFIG_FILE, --config SSH_CONFIG_FILE
                        SSH configuration file, defaults to ~/.ssh/config
  -z, --compress        Request server for compression over SSH transport
  -n, --noagent         Disable looking for keys from an SSH agent
  -d [FOLDER [FOLDER ...]], --host_pkey_directories [FOLDER [FOLDER ...]]
                        List of directories where SSH pkeys (in the format `id_*`) may be found
Comments
  • Hangs with Python 3.7

    Hangs with Python 3.7

    I'm using SSHTunnelForwarder with Python 3.7. After finishing my work, I run server.stop() and hangs.

    I believe it caused by socketserver.ThreadingMixIn https://docs.python.org/3.7/library/socketserver.html#socketserver.ThreadingMixIn

    Changed in version 3.7: socketserver.ForkingMixIn.server_close() and socketserver.ThreadingMixIn.server_close() now waits until all child processes and non-daemonic threads complete. Add a new socketserver.ForkingMixIn.block_on_close class attribute to opt-in for the pre-3.7 behaviour.

    Here's my work around. I changed the attribute server._server_list[0].block_on_close = False, and it behave like usual. It closed normally and not being hang.

    I'm not sure if setting block_on_close = False is a good way or not.

    Issue #135 may have the same cause.

    bug 
    opened by cjltsod 31
  • psycopg2 conn.poll() hangs when used with sshtunnel

    psycopg2 conn.poll() hangs when used with sshtunnel

    Hello

    I am using psycopg2 2.7.4 to connect to the PostgreSQL database server using asynchronous support. It is working absolutely fine. I have used sshtunnel v0.1.3 in pgAdmin4. When I connect the PostgreSQL database server using ssh tunnel and run the valid/correct query it works fine, but when I run any wrong query(invalid column of table) my application gets hang on conn.poll() function.

    Please refer the code how we use conn.poll() with timeouts https://git.postgresql.org/gitweb/?p=pgadmin4.git;a=blob;f=web/pgadmin/utils/driver/psycopg2/connection.py;h=4f11c12b30882209c308cb3558e67189c97ea31e;hb=15fe26a7106610b710f3de5b604cd038302c926a#l1363

    Can anyone please provide some pointers, suggestions? Similar question I have asked on psycopg2 ML.

    To figure out the solution, I have performed following test case:

    • Issue is reproducible only when server is connected using SSH Tunnel and any wrong query will be executed.
    • Create SSH Tunnel using ssh command "ssh -L 3333:127.0.0.1:5444 172.16.195.213". Create new server with Host = 127.0.0.1 and port = 3333. Open Query Tool and run the wrong query. Issue is not reproducible.
    • Enable logging of sshtunnel module by providing logger object in SSHTunnelForwarder() call. No useful logs found.
    • Enable logging of psycopg2 connection. No useful logs found.

    Note: I have verified the database server log and every time query gets executed.

    question wontfix 
    opened by akshay-joshi 16
  • Script won't exit because paramiko thread is still running

    Script won't exit because paramiko thread is still running

    The following script works and "FINISH" is printed, but it never exits to the shell:

    import threading
    
    from sshtunnel import SSHTunnelForwarder
    
    with SSHTunnelForwarder(
        "localhost",
        ssh_username="localuser",
        ssh_password="localpass",
        remote_bind_address=('127.0.0.1', 5984),
        local_bind_address=('127.0.0.1', 9000)
    ) as server:
    
        print(server.local_bind_port)
        # these don't help
        # server.stop()
        # server.close()
    
    # [t.close() for t in threading.enumerate() if t.__class__.__name__ == "Transport"]
    
    print('FINISH!')
    

    Python is waiting on threads to finish, but they never do. After running this script in iPython I can see the threads:

    threading.enumerate()
    [<_MainThread(MainThread, started 140735243972608)>,
     <HistorySavingThread(IPythonHistorySavingThread, started 123145307557888)>,
     <paramiko.Transport at 0x3880470 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>,
     <paramiko.Transport at 0x3874630 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>,
     <paramiko.Transport at 0x3191ba8 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>,
     <paramiko.Transport at 0x3874550 (cipher aes128-ctr, 128 bits) (active; 0 open channel(s))>,
     <paramiko.Transport at 0x3191c88 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>,
     <paramiko.Transport at 0x387bac8 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>,
     <paramiko.Transport at 0x3803e48 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>,
     <paramiko.Transport at 0x3874f60 (cipher aes128-ctr, 128 bits) (connected; awaiting auth)>]
    

    If I uncomment the last line which explicitly closes the paramiko.Transport threads, the script exits correctly. It seems like I'm missing something, but even so this default behavior is confusing.

    bug 
    opened by jsheedy 16
  • sshtunnel 0.7

    sshtunnel 0.7

    Since the addition of is_use_local_check_up parameter in 64af238 the default behaviour is not to check the local side of the tunnel. I see here two issues:

    • Being not backwards compatible with versions prior to 0.0.5 (which may be a decision made by @pahaz which I respect)
    • Not being able to set directly the way we want it to behave. Now we've first to create an SSHTunnelForwarder object, then change its is_use_local_check_up value to True.

    I added a new method for SSHTunnelForwarder to force those checks.

    opened by fernandezcuesta 15
  • Connection to remote MySQL db from Python 3.4

    Connection to remote MySQL db from Python 3.4

    Hi All, I posted a question about using SSH Tunnel on Stack Exchange recently, but I'm not sure if that was the right place for it (and I didn't get any answer). Would it have been better to post it on here? This is the "Issues" section which doesn't really seem right... I'm a bit lost :-(

    Thanks in advance. Stuart.

    question 
    opened by stuart258 14
  • User private keys are not found in default directory

    User private keys are not found in default directory

    This line of code

    https://github.com/pahaz/sshtunnel/blob/bd4ae32344a3a68ce27b1ad27c992687613b3182/sshtunnel.py#L1021

    prevents the or at

    https://github.com/pahaz/sshtunnel/blob/bd4ae32344a3a68ce27b1ad27c992687613b3182/sshtunnel.py#L1026

    to kick in and allow for DEFAULT_SSH_DIRECTORY to be searched. With the result that no keys are found even when there are plenty!

    bug 
    opened by mapio 13
  • Added silent setting to prevent raising exceptions

    Added silent setting to prevent raising exceptions

    When running sshtunnel as a thread, exceptions from the handler are printed to the console directly. This is often not a desired feature, since the console will become cluttered by error messages for any connection in error -- even when the majority of connections are successful. This pull request adds a boolean flag silent, that suppresses the exceptions while continuing to correctly log these errors using the Python logging module.

    With the addition of the logging.raiseExceptions flag, sshtunnel can now be operated in a completely silent way.

    import paramiko
    from sshtunnel import *
    import logging
    
    logging.raiseExceptions = False
    
    server = SSHTunnelForwarder(
        ssh_address=('1.2.3.4', 22),
        ssh_username='username',
        ssh_private_key=paramiko.RSAKey.from_private_key_file('...'),
        remote_bind_address=('127.0.0.1', 80),
        local_bind_address=('127.0.0.1', 80),
        silent=True,
    )
    
    server.start()
    
    question 
    opened by cjermain 12
  • Is there a way to make it work with Pageant on Windows ?

    Is there a way to make it work with Pageant on Windows ?

    I could not manage it.. Has anybody tried that ? Which options should be used ?

    I was (seemingly) able to connect to SSH using paramiko with Pageant, but I could not establish working tunnel for MySQL

    I can provide more details if anyone is interested.

    enhancement question 
    opened by 62mkv 11
  • [Regression] script hangs in 0.2.0, not 0.1.5 when not using context manager

    [Regression] script hangs in 0.2.0, not 0.1.5 when not using context manager

    I'm finding that my scripts are hanging forever even after I close the tunnel. This happens in versions 0.2.1 and 0.2.0, but not 0.1.5. So I think something has happened to break this.

    Note that in my use case I do not want to use a context manager. I'm deploying inside an AWS Lambda function, and I want to cache the connection between Lambda invocations, which means I need to assign the tunnel object to a global variable. I also have some unit tests with the unittest module's setUp() and tearDown() functions.

    The difference between .start() and the context manager seems to be:

    .daemon_forward_servers = True
    .daemon_transport = True
    

    What's the meaning of these parameters? Why are the defaults different between context manager and a function?

    Steps to reproduce

    We'll SSH to localhost, so run:

    ssh key-gen
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    

    Then run this script:

    from sshtunnel import SSHTunnelForwarder
    from time import sleep
    
    server = SSHTunnelForwarder(
        ssh_address_or_host='localhost',
        remote_bind_address=('localhost', 80),
        local_bind_address=('localhost', 8088),
        ssh_username='ec2-user',
        ssh_port=22,
        ssh_pkey='~/.ssh/epic_ssh_unit_test_key.private',
        ssh_config_file=None,
        allow_agent=False,
        set_keepalive=10,
        threaded=True
    )
    print("About to start")
    server.start()
    
    while not server.is_active:
        sleep(1)
        
    print("SSH up")
    
    server.stop()
    while server.is_active:
        sleep(1)
    print("Server stopped")
    

    If I add:

    server.daemon_forward_servers = True
    server.daemon_transport = True
    

    just before server.start() then it does work.

    Note that it does work with the context manager:

    import sshtunnel
    
    with sshtunnel.open_tunnel(
            ssh_address_or_host='localhost',
            remote_bind_address=('localhost', 80),
            local_bind_address=('localhost', 8088),
            ssh_username='ec2-user',
            ssh_port=22,
            ssh_pkey='~/.ssh/epic_ssh_unit_test_key.private',
            ssh_config_file=None,
            allow_agent=False,
            set_keepalive=10,
            threaded=True
        ) as tunnel:
    
        print("SSH up")
    
    print("Server stopped")
    

    I think this is related to #169 , but hard to tell since there's no detail there.

    bug duplicate wontfix 
    opened by mdavis-xyz 10
  • Tunnel hangs on database connect

    Tunnel hangs on database connect

    I'm connecting to a variety of database (Oracle, PostgreSQL und MS SQL) via SQLAlchemy. Connecting to an Oracle database makes the tunnel hang. This does not happen for PostgreSQL or MS SQL or when using plink to create the tunnel.

    I've created a trace log.

    oracle-hang.txt

    This is Python 3.6.2 64-bit on Windows. All modules have the latest version. Regards, Thorsten

    paramiko issue? 
    opened by thorstenkampe 10
  • SSHTunnelForwarder closing deadlocks if tunnel leads to self and a connection is left open

    SSHTunnelForwarder closing deadlocks if tunnel leads to self and a connection is left open

    This is a bit of a heisenbug. If I open a tunnel on my laptop from localhost:65000 to dbserver:1521 through server jumpserv, and then open a connection through it (in my case it was cx_Oracle accessing dbserver), closing the SSHTunnelForwarder without closing the dbserver connection prior works fine - the connection drops and the closing finishes. However, if the same tunnel is opened on jumpserv, from localhost:6500 to server dbserver:1521 through server jumpserv, and then I open the same connection through it, closing the SSHTunnelForwarder without closing the dbserver connection prior leads to a deadlock. This can lead to strange behaviour, as the same code works fine when executed on one machine and deadlocks on another. If you'd like, I can try to provide minimal code samples.

    bug 
    opened by chedatomasz 9
  • Modern packaging

    Modern packaging

    It would be nice if sshtunnel was packaged in a more modern way - inside it's own sshtunnel package directory with __init__.py, and the ability to break up the package into multiple .py modules. I also believe this would be helpful with adding of mypy static type checking support.

    opened by keithel-qt 1
  • Add types and type checking so mypy type checking is happy

    Add types and type checking so mypy type checking is happy

    Mypy is presently not happy with sshtunnel, as it is not annotated with python types in it's variables and function signatures.

    If you try importing sshtunnel in a project, and you run mypy against it, you will get messages similar to this:

    myproject/ssh_tunnel.py:2: error: Skipping analyzing "sshtunnel": module is installed, but missing library stubs or py.typed marker
    myproject/main.py:13: error: Skipping analyzing "sshtunnel": module is installed, but missing library stubs or py.typed marker
    myproject/main.py:13: note: See https://mypy.readthedocs.io/en/stable/running_mypy.html#missing-imports
    Found 2 errors in 2 files (checked 32 source files)
    [cargo-make] ERROR - Error while executing command, exit code: 1
    [cargo-make] WARN - Build Failed.
    

    I created this issue to track progress of sshtunnel working well with Mypy - being able to check sshtunnel's static typing. This also would encompass adding static typing to sshtunnel, which will aid testing.

    opened by keithel-qt 0
  • opentunnel with -N parameter

    opentunnel with -N parameter

    Hello dear

    I am working on a client-side connection that will open a tunnel on a server with a user that doesn't have permission to run command and the user only can use port forwarding so on client-side ssh most run with the -N argument

    now where I open my tunnel the tunnel will close by the server because the ssh tunnel didn't pass -N

    how can I solve this issue?

    opened by B14ckP4nd4 0
  • SSHTunnel able to log in even with wrong credentials

    SSHTunnel able to log in even with wrong credentials

    I'm trying to use SSH agent to tunnel to a remote machine, but I want to explicitly ONLY allow key-based authentication (from the client side) based on a key passed in at runtime, not based off of whatever the OS has saved at the time. However, SSHTunnelForwarder appears to be ignoring these directives and is successfully connecting every time, even when I deliberately pass in the incorrect key. Minimum viable example below:

    import time
    
    from sshtunnel import SSHTunnelForwarder
    
    tunnel = SSHTunnelForwarder(
        'my.server.ip.address',
        ssh_config_file=None,
        ssh_username='edgeot',
        ssh_pkey='/home/fshriver/test_keys/test_key',
        local_bind_address=('127.0.0.1', 9555),
        remote_bind_address=('127.0.0.1', 9555),
        allow_agent=False
    )
    
    tunnel.start()
    
    print(tunnel.tunnel_is_up)
    
    time.sleep(10)
    
    tunnel.close()
    

    As stated, if I've ssh'd into the server before then sshtunnel will never fail to ssh in, even when I change the key to some non-existent filepath. I believe this is because it's still using the ssh agent, but my understanding is allow_agent=False should disable that. Is that incorrect behavior? Am I missing something?

    opened by fshriver 0
Releases(0.4.0)
  • 0.4.0(Jan 11, 2021)

    • Change the daemon mod flag for all tunnel threads to prevent unexpected hangs (#219) (is not fully backward compatible!)
    • Add docker based end to end functional tests for Mongo/Postgres/MySQL (#219)
    • Add docker based end to end hangs tests (#219)
    Source code(tar.gz)
    Source code(zip)
  • 0.3.2(Jan 11, 2021)

  • 0.3.1(Nov 15, 2020)

  • 0.3.0(Nov 15, 2020)

    • Change default with context behavior to use .stop(force=True) on exit (is not fully backward compatible)
    • Remove useless daemon_forward_servers = True hack for hangs prevention (is not fully backward compatible)
    • Set transport keepalive to 5 second by default (disabled for version < 0.3.0)
    • Set default transport timeout to 0.1
    • Deprecate and remove block_on_close option
    • Fix "deadlocks" / "tunneling hangs" (#173, #201, #162, #211)
    Source code(tar.gz)
    Source code(zip)
  • 0.2.2(Oct 31, 2020)

  • 0.2.1(Oct 24, 2020)

    v.0.2.1

    • Fixes bug with orphan thread for a tunnel that is DOWN (#170). (@pahaz, @eddie-chiang and @kkrasovskii)

    NOTE:: regression https://github.com/pahaz/sshtunnel/issues/201

    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Oct 24, 2020)

    v.0.2.0

    • Support IPv6 without proxy command. Use built-in paramiko create socket logic. The logic tries to use ipv6 socket family first, then ipv4 socket family. (Georgy Rylov) https://github.com/pahaz/sshtunnel/pull/195

    NOTE: possible regression https://github.com/pahaz/sshtunnel/issues/201

    Source code(tar.gz)
    Source code(zip)
  • 0.0.7.3(Feb 16, 2015)

Owner
Pavel White
Entrepreneurship. Founder and CTO of 8IQ Software. FullStack DevOps Security Engineer %) And IT 💘lover
Pavel White
Rundeck / Grafana / Prometheus / Rundeck Exporter integration demo

Rundeck / Prometheus / Grafana integration demo via Rundeck Exporter This is a demo environment that shows how to monitor a Rundeck instance using Run

Reiner 4 Oct 14, 2022
Utilitaire de contrôle de Kubernetes

Utilitaire de contrôle de Kubernetes ** What is this ??? ** Every time we use a word in English our manager tells us to use the French translation of

Théophane Vié 9 Dec 03, 2022
Phonebook application to manage phone numbers

PhoneBook Phonebook application to manage phone numbers. How to Use run main.py python file. python3 main.py Links Download Source Code: Click Here M

Mohammad Dori 3 Jul 15, 2022
This projects provides the documentation and the automation(code) for the Oracle EMEA WLA COA Demo UseCase.

COA DevOps Training UseCase This projects provides the documentation and the automation(code) for the Oracle EMEA WLA COA Demo UseCase. Demo environme

Cosmin Tudor 1 Jan 28, 2022
Tencent Yun tools with python

Tencent_Yun_tools 使用 python3.9 + 腾讯云 AccessKey 利用工具 使用之前请先填写config.ini配置文件 Usage python3 Tencent_rce.py -h Scanner python3 Tencent_rce.py -s 生成CSV

<img src="> 13 Dec 20, 2022
A cron monitoring tool written in Python & Django

Healthchecks Healthchecks is a cron job monitoring service. It listens for HTTP requests and email messages ("pings") from your cron jobs and schedule

Healthchecks 5.8k Jan 02, 2023
Hw-ci - Hardware CD/CI and Development Container

Hardware CI & Dev Containter These containers were created for my personal hardware development projects and courses duing my undergraduate degree. Pl

Matthew Dwyer 6 Dec 25, 2022
A collection of beginner-friendly DevOps content

mansion Mansion is just a testing repo for learners to commit into open source project. These are the steps you need to learn: Please do not edit thes

Bryan Lim 62 Nov 30, 2022
Learning and experimenting with Kubernetes

Kubernetes Experiments This repository contains code that I'm using to learn and experiment with Kubernetes. 1. Environment setup minikube kubectl doc

Richard To 10 Dec 02, 2022
A curated list of awesome DataOps tools

Awesome DataOps A curated list of awesome DataOps tools. Awesome DataOps Data Catalog Data Exploration Data Ingestion Data Lake Data Processing Data Q

Kelvin S. do Prado 40 Dec 23, 2022
Supervisor process control system for UNIX

Supervisor Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems. Supported Platf

Supervisor 7.6k Dec 31, 2022
Let's learn how to build, release and operate your containerized applications to Amazon ECS and AWS Fargate using AWS Copilot.

🚀 Welcome to AWS Copilot Workshop In this workshop, you'll learn how to build, release and operate your containerised applications to Amazon ECS and

Donnie Prakoso 15 Jul 14, 2022
Webinar oficial Zabbix Brasil. Uma série de 4 aulas sobre API do Zabbix.

Repositório de scripts do Webinar de API do Zabbix Webinar oficial Zabbix Brasil. Uma série de 4 aulas sobre API do Zabbix. Nossos encontros [x] 04/11

Robert Silva 7 Mar 31, 2022
A Kubernetes operator that creates UptimeRobot monitors for your ingresses

This operator automatically creates uptime monitors at UptimeRobot for your Kubernetes Ingress resources. This allows you to easily integrate uptime monitoring of your services into your Kubernetes d

Max 49 Dec 14, 2022
CI repo for building Skia as a shared library

Automated Skia builds This repo is dedicated to building Skia binaries for use in Skija. Prebuilt binaries Prebuilt binaries can be found in releases.

Humble UI 20 Jan 06, 2023
A basic instruction for Kubernetes setup and understanding.

A basic instruction for Kubernetes setup and understanding Module ID Module Guide - Install Kubernetes Cluster k8s-install 3 Docker Core Technology mo

648 Jan 02, 2023
Micro Data Lake based on Docker Compose

Micro Data Lake based on Docker Compose This is the implementation of a Minimum Data Lake

Abel Coronado 15 Jan 07, 2023
Ralph is the CMDB / Asset Management system for data center and back office hardware.

Ralph Ralph is full-featured Asset Management, DCIM and CMDB system for data centers and back offices. Features: keep track of assets purchases and th

Allegro Tech 1.9k Jan 01, 2023
Some automation scripts to setup a deployable development database server (with docker).

Postgres-Docker Database Initializer This is a simple automation script that will create a Docker Postgres database with a custom username, password,

Pysogge 1 Nov 11, 2021
A tool to clone efficiently all the repos in an organization

cloner A tool to clone efficiently all the repos in an organization Installation MacOS (not yet tested) python3 -m venv .venv pip3 install virtualenv

Ramon 6 Apr 15, 2022