Machen Sie einen SSH-Tunnel über R zu einem anderen Computer, um auf die postgreSQL-Tabelle zuzugreifen

Als Teil meines R-Workflows für eines meiner Projekte lade ich Daten aus einer PostgreSQL-Tabelle auf einem Remote-Server.

Mein Code sieht so aus (anonymisierte Anmeldeinformationen).

Ich öffne zuerst eine SSH-Verbindung zum Remote-Serverin terminal.

ssh -p Port -L LocalPort:IP:RemotePort servername"

Ich verbinde mich dann mit der Postgres-Datenbank in R.

# Load the RPostgreSQL package
library("RPostgreSQL")

# Create a connection
Driver <- dbDriver("PostgreSQL") # Establish database driver
Connection <- dbConnect(Driver, dbname = "DBName", host = "localhost", port = LocalPort, user = "User")

# Download the data
Data<-dbGetQuery(Connection,"SELECT * FROM remote_postgres_table")

Dieser Ansatz funktioniert einwandfrei und ich kann die Daten problemlos herunterladen.

Ich möchte jedoch den ersten Schritt - d. H. Das Herstellen der ssh-Verbindung - in R und nicht im Terminal ausführen. Hier ist mein Versuch, dies mit begleitendem Fehler zu tun.

# Open the ssh connection in R
system("ssh -T -p Port -L LocalPort:IP:RemotePort servername")

# Load the RPostgreSQL package
library("RPostgreSQL")

# Create a connection
Driver <- dbDriver("PostgreSQL") # Establish database driver
Connection <- dbConnect(Driver, dbname = "DBName", host = "localhost", port = LocalPort, user = "User")

# Download the data
Data<-dbGetQuery(Connection,"SELECT * FROM remote_postgres_table")

Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.

Um meine Frage zu klären, möchte ich diesen gesamten Workflow (Herstellen einer Verbindung, Herunterladen von PostgreSQL-Daten) vollständig in R ausführen, ohne dass Schritte im Terminal erforderlich sind.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage