R: MySQL connection through bastion directly from R



我想通过bastion host连接MySQL数据库。

我遵循了一些以前的StackOverflow答案,我能够通过终端(在RStudio中)建立连接:

ssh -i <path_to_key_file> <username>@<bastion_host> -L 3306:<db_host>:3306

Then from R:

library(RMySQL)
m <- dbDriver("MySQL")
con <- dbConnect(
m,
user='<db_username>',
password='<db_password>',
host='127.0.0.1',
dbname='<db_name>',
port=3306
)
dbGetQuery(con, "SHOW TABLES;")
dbDisconnect(con)

但是现在,我如何直接从R代码建立连接?,这样我就不用在终端上使用ssh了。我知道library(ssh)在这里可能有帮助,但我不知道如何使它工作。

谢谢!

好的,解决方案改编自类似的帖子(我最初没有找到)。

library(RMySQL)
library(ssh)
library(sys)
target <- "<db_host>:3306"
ProxySev <- "<username>@<bastion_host>"
keyfile <- "<path_to_key_file>"
port <- 3307
cmd <- paste0('ssh::ssh_tunnel(ssh::ssh_connect(host = "', ProxySev, '", keyfile ="', keyfile, '"), port = ', port, ', target = "', target, '")')
pid <- sys::r_background(
std_out = FALSE,
std_err = FALSE,
args = c("-e", cmd)
)
conn <- dbConnect(
dbDriver("MySQL"),
user='<db_username>',
password='<db_password>',
host='127.0.0.1',
dbname='<db_name>',
port=3307
)  
dbGetQuery(conn, "SHOW TABLES")
dbDisconnect(conn)

最新更新