R:MySQL 直接从 R 通过堡垒连接

R: MySQL connection through bastion directly from R

我想通过堡垒主机连接到 MySQL 数据库。

我关注了一些 previous Whosebug answers 并且我能够通过终端建立连接(在 RStudio 中):

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

然后从 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)