我试图使用dplyr连接到远程数据库,我通常通过ssh隧道查询.
我首先建立一个如下所示的ssh隧道:
alias tunnel_ncg='ssh -fNg -L 3307:127.0.0.1:3306 mysqluser@myhost mysql5 -h 127.0.0.1:3306 -P 3307 -u mysqluser -p mypassword'
Run Code Online (Sandbox Code Playgroud)
此时,我可以通过连接到localhost:3307来访问数据库.例如:
mysql -h '127.0.0.1' -P 3307 -u mysqluser
Run Code Online (Sandbox Code Playgroud)
如果我尝试通过dplyr访问同一个数据库,我收到一个错误,抱怨它无法连接到本地MySQL套接字:
> conDplyr = src_mysql(dbname = "mydb", user = "mysqluser", password = "mypassword", host = "localhost", port=3307)
Error in .local(drv, ...) :
Failed to connect to database: Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Run Code Online (Sandbox Code Playgroud)
我的理解是RMySQL/dplyr正在尝试在本地计算机中查找套接字文件,但他们应该真正在远程服务器中查找它.有没有办法解决这个问题,或者解决方法?
更新:
如果我尝试通过dbConnect/RMySQL连接,连接正常:
> dbConnect(dbDriver("MySQL"), user="mysqluser", password="mypassword", dbname="mydb", host="127.0.0.1", port=3307)
<MySQLConnection:0,1>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在路由器后面的机器中生成SSH服务器.
首先,我尝试将SSH绑定到我的公共IP地址:
ssh -R 10002:localhost:22 <ip_address>
Run Code Online (Sandbox Code Playgroud)
然后我提示密码请求,但我的用户名密码似乎不起作用.
显然我知道我的用户名密码,所以在我看来它正在尝试在同一网络下的另一台计算机上进行身份验证.
有任何建议如何解决这个问题?
当您无法访问路由器时,它还可以帮助我了解如何在路由器后面创建SSH服务器.
iptables中的端口都是开放的.
UPDATE
正如托马斯奥斯特所说,我已经尝试了以下内容.
在路由器后面的机器中,我执行了以下命令:
$ ssh -R10002:localhost:22 <remote_public_ip_address> -l <my_remote_server_username>
<remote_ip_address> 作为具有公共IP和SSH服务器的服务器的remote_ip_address,我可以完全控制它.
<my_remote_server_username> 是远程服务器用户名.
之后,我尝试从远程服务器连接到路由器后面的服务器,如下所示:
$ ssh -p 10002 <remote_public_ip_address>
但是,此命令显示以下输出:
ssh: connect to host <remote_public_ip_address> port 10002: Connection refused
Run Code Online (Sandbox Code Playgroud)
所以我使用以下命令在iptables防火墙中打开了10002端口:
sudo iptables -A INPUT -p tcp --dport 10002 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
之后,我再次执行了命令,但它显示相同的错误消息.
在路由器后面的我的机器中,我在iptables中打开了所有端口.
更新2
您必须在remove_public_ip_address服务器的/ etc/ssh/sshd_config中允许端口转发
我试图在sshd_config文件中允许portforwarding添加此命令:
LocalForward 10002 <my_remote_public_server_ip>:22
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误信息:
Bad configuration option: LocalForward
Run Code Online (Sandbox Code Playgroud)
在"ssh -R ...."之后你是否打开了窗户?
执行该命令后,它连接到远程公共机器,是的,我打开了窗口.
创建隧道后,可以在公共服务器上使用ssh -p 10002 localhost吗?
是的,如果我在公共服务器中执行该命令,它会在询问我的凭据后连接.
请在路由器后面的机器上尝试"ssh localhost",检查sshd是否正在运行.
这也有效.
更新3 …
我正在开发一个驻留在公共主机上的应用程序,但其源代码必须保存在公司防火墙后面的Git存储库中.我得到非常疲倦通过部署的缓慢的scp(复制整个仓库和运输过来SSH每个部署),并希望有远程主机只是做了git pull更新.问题是防火墙禁止传入SSH连接.
我是否可以设置从我的计算机到部署计算机的SSH隧道,并使用我的存储库作为git pull?毕竟,git是分发的,所以我的副本与中央副本一样有效.如果可以,那么tunnel命令和Capistrano配置是什么?
我认为隧道看起来像
ssh -R something:deployserver.com:something deploybot@deployserver.com
Run Code Online (Sandbox Code Playgroud) 我的目标是连接到防火墙后面的服务器(主机).我可以通过连接到网络中的另一个服务器(隧道)然后SSH到此服务器来访问此服务器.但是我无法通过JSch实现相同的场景.
我无法使用以下代码工作,我为此目的编写了这些代码.如果我在这里做任何蠢事,请告诉我.
public class JschExecutor {
public static void main(String[] args){
JschExecutor t=new JschExecutor();
try{
t.go();
} catch(Exception ex){
ex.printStackTrace();
}
}
public void go() throws Exception{
StringBuilder outputBuffer = new StringBuilder();
String host="xxx.xxx.xxx.xxx"; // The host to be connected finally
String user="user";
String password="passwrd";
int port=22;
String tunnelRemoteHost="xx.xx.xx.xx"; // The host from where the tunnel is created
JSch jsch=new JSch();
Session session=jsch.getSession(user, host, port);
session.setPassword(password);
localUserInfo lui=new localUserInfo();
session.setUserInfo(lui);
session.setConfig("StrictHostKeyChecking", "no");
ProxySOCKS5 proxyTunnel = new ProxySOCKS5(tunnelRemoteHost, 22);
proxyTunnel.setUserPasswd(user, password); …Run Code Online (Sandbox Code Playgroud) 我无法远程访问MySQL.我使用SSH隧道,并希望使用Python + SQLALchemy连接数据库MySQL.
当我在我的控制台中使用MySQL-client并指定" ptotocol=TCP"时,一切都很好!我用命令:
mysql -h localhost —protocol=TCP -u USER -p
Run Code Online (Sandbox Code Playgroud)
我通过SSH隧道访问远程数据库.
但是,当我想使用Python + SQLAchemy连接到数据库时,我找不到像这样的选项,—protocol=TCP
否则,我只连接到本地MySQL数据库.请告诉我,有没有办法使用SQLAlchemy来做到这一点.
我们正尝试使用Java客户端从Kafka集群中进行使用.群集是Jump主机的后面,因此唯一的访问方式是通过SSH隧道.但我们无法读取,因为一旦消费者获取元数据,它就会使用原始主机连接到代理.这种行为可以被覆盖吗?我们可以要求Kafka客户端不使用元数据吗?
我正在尝试远程连接到服务器,然后使用 Python 访问它的本地数据库。我已成功连接到服务器,但似乎无法连接到服务器上的数据库。我的代码如下:
import psycopg2
from sshtunnel import SSHTunnelForwarder
try:
with SSHTunnelForwarder(
('<server ip address>', 22),
ssh_private_key="</path/to/private/ssh/key>",
ssh_username="<server username>",
remote_bind_address=('localhost', 5432)) as server:
print "server connected"
conn = psycopg2.connect(database="<dbname>",port=server.local_bind_port)
curs = conn.cursor()
print "database connected
except:
print "Connection Failed"
Run Code Online (Sandbox Code Playgroud)
这些是我在互联网上找到并拼凑起来的代码片段。我还尝试了下面的连接语句来代替上面的代码:
params = {
'database': '<dbname>',
'user': '<dbusername>',
'password': '<dbuserpass>',
'host': 'localhost',
'port': 5432
}
conn = psycopg2.connect(**params)
Run Code Online (Sandbox Code Playgroud)
我知道我可以连接到数据库,因为在我的机器上;我能够使用sqlectron隧道并适当地连接。
以防万一不清楚我想从上面做什么,我需要使用我计算机上的私有 ssh 密钥通过 ssh 隧道进入我的远程服务器(正常工作),然后我需要连接到一个 PostgreSQL 数据库对localhost在端口5432。
我目前收到两种尝试连接方式的当前错误消息:
import psycopg2
from sshtunnel import SSHTunnelForwarder
try:
with …Run Code Online (Sandbox Code Playgroud) 我在AWS VPN中运行了一个Ipython Jupyter内核,我将隧道连接到笔记本电脑的端口,我用浏览器连接到该端口.我发现每当我丢失隧道时内核都会死掉,我必须从头开始运行我的笔记本.
造成这种情况的可能原因是什么?如何预防?
只有笔记本内核死机,笔记本电脑服务器才能保持运转状态.
我正在运行Linux Mint并尝试以这种方式连接到mySQL
mysql --port=3306 -u root -p
Run Code Online (Sandbox Code Playgroud)
然后它会提示我输入密码.这一切都很好.为什么当我输入这样的东西时它仍然有用......
mysql --port=1234 -u root -p
Run Code Online (Sandbox Code Playgroud)
如果没有失败,因为端口1234上没有运行mySQL服务器?
我问这个的原因是因为我想创建一个SSH隧道连接到另一台服务器上的数据库.假设SSH隧道将我的所有流量从localhost:3308转发到myremoteserver:3306.由于我的本地mySQL服务器接受我在所有端口上的连接,我实际上无法连接到端口3308并命中远程服务器.我还在打我的本地服务器....
即使我的SSH隧道选项可能出错了,我想知道是否有人知道为什么我可以连接到端口1234并且它仍然命中我在3306上运行的本地mySQL服务器?
我对 Oracle SQL Developer(版本 17.2)和 SSH 隧道没有广泛的了解。我一直在使用PuTTY(我用的软件是KiTTY)建立SSH隧道连接数据库。这是我最初如何使用 KiTTY 进行设置的示例。此外,当我启动将弹出命令提示符窗口的会话时,我需要输入用户名和密码。假设用户名是username,密码是password。对于数据库,用户名是database_username,密码是database_password。
SSH 设置:

隧道设置:

我View > SSH从Oracle SQL Developer 中了解到可以直接使用SSH( ) 功能,我已经尝试了两天但没有奏效。根据我在上面两张图片中所附的信息,我可以使用内置的 SSH 功能还是必须始终使用 PuTTY?这是我目前的设置方式:
Oracle SQL Developer 设置中的 SSH:

我应该如何更改内置 SSH 设置以便我通过 SSH 连接到数据库?这可能吗?如果是这样,您能否告诉我在这些字段中输入信息所需的确切信息(请使用我的信息,以便我可以按照每个步骤进行操作)?我只是认为这个过程可以在一个程序中简化。
ssh-tunnel ×10
ssh ×5
mysql ×2
python ×2
apache-kafka ×1
capistrano ×1
database ×1
deployment ×1
dplyr ×1
firewall ×1
ipython ×1
java ×1
jsch ×1
linux ×1
linux-mint ×1
nat ×1
postgresql ×1
putty ×1
r ×1
rmysql ×1
sqlalchemy ×1
tcp ×1