我尝试使用dplyr'来尝试连接到位于外部服务器中的数据库
src_postgres(dbname = NULL, host = NULL, port = NULL, user = NULL,
password = NULL, ...)
到目前为止,我已经获得了连接数据库所需的所有参数。问题是数据库所在的服务器也需要身份验证(用户名和密码)。
我尝试与?pipe
建立连接,但似乎只有在尝试从远程服务器提取文件时才有效。
任何线索?
答案 0 :(得分:1)
来自https://serverfault.com/posts/241593/edit
在本地计算机上生成ssh密钥:
$ ssh-keygen -t rsa -b 2048
按 Enter 获取空密码短语导致:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
将密钥复制到目标服务器
ssh-copy-id id@server
检查这是否适用于ssh 'id@server'
,并检查文件夹.ssh/authorized_keys
以获取ssh密钥。
您应该知道能够使用$ ssh id@server
你应该知道能够使用
ssh -fN id@server
主动建立SSH连接并将端口转发到本地主机。
您可能需要将-p
参数调整为ssh
以选择正确的端口。
成功转发端口后,您应该可以使用本地计算机上的src_postres()
来访问远程数据库。
您也可以使用
启动R脚本system("ssh -fN id@server")
或将命令放在.Rprofile
另外,也许您不希望脚本中有id
和server
地址,例如,如果您要将它们提供给客户端,或者将它们放在github上。< / p>
然后,使用以下内容编辑或创建文件(在本地计算机上).ssh/config
:
Host my_ssh
User id
Hostname server
然后您可以使用ssh -fN my_ssh
答案 1 :(得分:0)
执行此操作的最佳方法是通过DBI
连接,然后使用dplyr
的开放连接。例如:
library(DBI)
con <- dbConnect(RPostgres::Postgres())
db_table <- tbl(con, "my_table")
db_table %>%
group_by(one_var) %>%
tally()