Giter VIP home page Giter VIP logo

Comments (1)

FlorianSchwendinger avatar FlorianSchwendinger commented on July 17, 2024

You can try something like.

start_tunnel_process <- function(user, server, port, stderr = nullfile()) {
    proc <- callr::r_bg(
        function(user, server, port) {
            ssh_host <- paste(user, server, sep = "@")
            while (TRUE) {
                ssh_session <- ssh::ssh_connect(ssh_host, keyfile = "~/.ssh/id_rsa", verbose = FALSE)
                ssh::ssh_tunnel(ssh_session, port = port, target = "localhost:27017")
                ssh::ssh_disconnect(ssh_session)
            }
        },
        args = list(user, server, port),
        stdout = nullfile(),
        stderr = stderr
    )
    proc
}

I currently evaluating this for my use case with mongolite.

url <- sprintf("mongodb://%s:%s@%s:%s", user, password, host, as.integer(port))
con <- mongo(collection, db = database, url = url)
con$find()
con$disconnect()

You need the while loop since after you disconnect the tunnel will close.
The while will create a new tunnel. This also means it will fail, if the time between two connections is to short for the 2nd process to create a new tunnel. You can hack this by putting a fault tolerant loop around your connect function.

for (i in seq_len(100)) {
    status <- try(con <- mongo(collection, db = database, url = url), silent = TRUE)
    if (!inherits(status, "try-error")) break
    Sys.sleep(0.2)
}

This works, but is also kind of a hack since the background R process runs at 100% CPU all the time which is to much.

from ssh.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.