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)
我想通过堡垒主机连接到 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)