首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过node docker中的ssh隧道连接

在Docker容器中通过SSH隧道连接到远程服务器,可以使用ssh命令来创建隧道。以下是一个详细的步骤指南,展示如何在Node.js应用程序中通过Docker容器使用SSH隧道连接到远程服务器。

步骤1:创建Dockerfile

首先,创建一个Dockerfile来构建你的Node.js应用程序,并确保安装了ssh客户端。

代码语言:javascript
复制
# 使用官方的Node.js镜像作为基础镜像
FROM node:14

# 创建应用目录
WORKDIR /usr/src/app

# 复制package.json和package-lock.json
COPY package*.json ./

# 安装应用依赖
RUN npm install

# 复制应用代码
COPY . .

# 安装ssh客户端
RUN apt-get update && apt-get install -y openssh-client

# 暴露应用端口
EXPOSE 3000

# 启动应用
CMD ["node", "app.js"]

步骤2:创建启动脚本

创建一个启动脚本(例如start.sh),用于在启动Node.js应用程序之前创建SSH隧道。

代码语言:javascript
复制
#!/bin/bash

# 创建SSH隧道
ssh -f -N -L 3306:localhost:3306 user@remote_server -p 22

# 启动Node.js应用
node app.js

确保脚本具有可执行权限:

代码语言:javascript
复制
chmod +x start.sh

步骤3:更新Dockerfile以使用启动脚本

更新Dockerfile以使用启动脚本来启动应用程序。

代码语言:javascript
复制
# 使用官方的Node.js镜像作为基础镜像
FROM node:14

# 创建应用目录
WORKDIR /usr/src/app

# 复制package.json和package-lock.json
COPY package*.json ./

# 安装应用依赖
RUN npm install

# 复制应用代码
COPY . .

# 安装ssh客户端
RUN apt-get update && apt-get install -y openssh-client

# 复制启动脚本
COPY start.sh .

# 确保启动脚本具有可执行权限
RUN chmod +x start.sh

# 暴露应用端口
EXPOSE 3000

# 使用启动脚本启动应用
CMD ["./start.sh"]

步骤4:构建和运行Docker镜像

构建Docker镜像:

代码语言:javascript
复制
docker build -t my-node-app .

运行Docker容器:

代码语言:javascript
复制
docker run -d -p 3000:3000 my-node-app

步骤5:在Node.js应用中使用SSH隧道

在你的Node.js应用中,你可以像平常一样连接到本地端口,因为SSH隧道已经将本地端口转发到远程服务器。例如,如果你要连接到远程MySQL数据库,可以这样做:

代码语言:javascript
复制
const mysql = require('mysql');

const connection = mysql.createConnection({
  host: 'localhost', // 连接到本地端口
  user: 'your_db_user',
  password: 'your_db_password',
  database: 'your_db_name',
  port: 3306 // 本地端口
});

connection.connect((err) => {
  if (err) {
    console.error('Error connecting to the database:', err);
    return;
  }
  console.log('Connected to the database');
});

// 你的其他数据库操作代码
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

通过反向 SSH 隧道连接 RDP

用例 6:向一个已知动态域名解析服务发起请求 在此用例,我们要通过一个已知动态域名解析服务列表与所有A记录查询请求进行比对,一个列表例子 https://gist.githubusercontent.com...SSH 隧道连接 RDP 通过一条用 plink.exe 或者 FreeSSH 或者其他类似的工具建立起来反向 SSH 隧道来建立一个RDP连接,这可以为攻击者提供一个伪 V** 服务,攻击者可以在产生更小噪音和更少痕迹前提下...SSH 隧道使用 RDP 细节在这篇文章 https://blog.netspi.com/how-to-access-rdp-over-a-reverse-ssh-tunnel/ Setup...你可以看到是,所有与本地回环地址 3389 通信都被记录下来了。 另一个细节是,通过 ssh 隧道登陆时,失败登陆事件(事件 id 4625)将不会被记录下来。...,并且使用 sysmon 事件 id 为 3 事件(网络连接事件)。

3.2K20

python使用mysqldb模块通过ssh隧道连接mysql(密码|密钥)

主要出于安全考虑,数据库服务器只允许堡垒机通过ssh访问,这对日常使用带来了麻烦。问题是这样,MySQL数据库放在了服务器A上,只允许服务器B来访问,而我在机器C上,可以通过ssh连接服务器B。...pip install sshtunnel pip install mysqlclient ssh通过密码连接 import MySQLdb from sshtunnel import SSHTunnelForwarder...# 和数据库字符编码集合,保持一致,这样能够解决读出数据中文乱码问题 ) ssh通过密钥连接 # -*- coding:utf-8 -*- import pymysql from sshtunnel...,多半说是因为你查询 sql操作时间过长,或者是传送数据太大 ,但是我这个地方实际上就是因为出了with as 作用域,导致连接又给关闭掉了,所以出现这样结果。...这样连接数据库我们就写成了一个单独函数,改了之后,直接也还放在这个函数里就好了,替代原来connect语句。

3.7K10
  • 数据库PostrageSQL-使用SSH隧道安全 TCPIP 连接

    使用SSH隧道安全 TCP/IP 连接 可以使用SSH来加密客户端和PostgreSQL服务器之间网络连接。如果处理得当,这将提供一个足够安全网络连接,即使是对那些无 SSL 能力客户端。...然后你可以从客户端机器采用下面这种形式命令建立一个安全隧道ssh -L 63333:localhost:5432 joe@foo.com -L参数第一个数(63333)是隧道在你那一端端口号...第二个数(5432)是隧道远端:你服务器所使用端口号。在端口号之间名字或 IP 地址是你准备连接数据库服务器主机,至于你是从哪个主机登入,在这个例子则由foo.com表示。...为了让隧道设置成功,你必须允许通过ssh作为joe@foo.com连接,就像你已经尝试使用ssh来创建一个终端会话。...到db.foo.com连接方法将不会被 SSH 隧道加密。

    90210

    Docker - 如何使用SSH连接到正在运行容器

    本篇文章主要介绍了如何使用SSH将你Docker容器与其他Docker容器进行连接方法,如果我忽略了一个或多个重点,请随意评论/建议。...以下是本篇文章几个重要步骤: 如何安装SSH 在现有容器上运行SSH方法 使用SSH连接到其他运行容器方法 如何安装SSH 如果你已经有一个正在运行docker容器,并且你想通过SSH...连接docker容器,并允许其他Docker容器通过SSH进行连接,那么下面是一组安装SSH指令: ## ## 安装 openssh-server 和 epel-release ##...> / bin / bash 使用SSH连接到其他运行容器方法 按照上述步骤在现有容器上安装了SSH并打开了22端口之后,请执行以下操作以从另一个容器测试SSH连接: 按照以上步骤安装SSH...文件夹 我希望这篇文章能够帮助到那些想要使用SSH将一个Docker容器连接到其他Docker容器读者。

    5.3K70

    Docker - 如何SSH连接到正在运行容器

    本文包含有关如何让Docker容器使用SSH与其他Docker容器连接说明。如果我没有提到一个或多个重点,请随意评论/建议。...以下是本文稍后介绍要点: 说明安装SSH 在现有容器上启用SSH技巧 SSH到运行容器技巧 说明安装SSH 如果你已经有一个正在运行容器,并且你想通过SSH进行SSH连接并允许其他Docker...容器通过SSH进行连接,那么下面是一组安装SSH指令: ## ## 安装openssh-server和epel-release ## yum -y install openssh-server epel-release...以下是你如何开放22端口: 从容器退出 使用以下命令提交Docker容器镜像:docker commit 使用以下命令运行一个新容器... @其他Docker容器IP>:/ tmp 以上执行将文件发送到其他Docker容器/ tmp文件夹 我希望你发现这篇文章对于使用SSH将一个Docker容器连接到其他

    2.5K60

    通过SSH连接本地linux虚拟机过程记录

    192.168.123.x不冲突IP 子网掩码:NETMASK=255.255.255.0 子网网关 GATEWAY=192.168.163.2 修改后如下后保存 DEVICE="eth0" BOOTPROTO...四、进行SSH连接,附修复无法访问外部网络方法 本地执行:ssh root@192.168.123.123提示输入密码后成功进入系统 测试修改静态IP后外部网络是否可用 [root@localhost...*用xshell连接VMwareLinux Xshell 5连接本地虚拟机 Linux系统 Vmware虚拟机修改静态IP无法ping外网,以及eth0不见问题解决* *CentOS7设置静态...IP以及windows下ping不通虚拟机、虚拟机ping不通外网解决方案 注:设置成功后物理机更换IP后NAT网卡网段和物理网卡网段不一致了也不影响使用 到此这篇关于通过SSH连接本地linux虚拟机过程记录文章就介绍到这了...,更多相关SSH连接本地linux内容请搜索ZaLou.Cn以前文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!

    1.8K31

    解决服务器重装无法通过ssh连接问题

    当我们Linux服务器选择重装系统后,再次使用ssh ip@user在命令行登录服务器时,会有如上文报错,纠其原因就是我们命令行所在电脑在第一次连接成功服务器时,会记录一个ip+RSA秘钥,由于服务器重装...,Linux服务器RSA公钥改变,那么相同ip两者公钥无法对起来,所以会出现该问题。...解决问题办法 编辑Mac系统用户文件下known_hosts文件。由于个人用户名称不一致,命令请自行更改。...vi /Users/liu_pc/.ssh/known_hosts 正常情况下会有ip + rsa公钥文本,在vi下使用插入模式删除对应ip+rsa公钥文本即可。 使用:wq保存文件。...然后再使用ssh命令登录即可。

    2.8K20

    SSH隧道本地端口转发访问远程服务数据库

    当我本地没有安装任何数据库服务时候,可以直接通过我本地端口访问远程机器上数据库服务,实现这样效果就可以使用本地转发功能 实际测试本地端口转发,把本地9006端口转发给远程服务器115.159.28.111...3306端口,当然需要输入远程机器用户名和密码 ssh -L 9006:115.159.28.111:3306 ubuntu@115.159.28.111 执行完成后,可以在另一个终端中使用netstat...命令查看到本地9006端口本监听了,然后直接使用mysql命令去连接9006端口就可以访问到远程机器3306数据库了。...当然与之相对应还有远程转发,把远程机器端口转发给我本地上,可以方便调试项目 我在线视频课程地址: https://edu.csdn.net/course/detail/26370

    2.4K00

    Mac通过不同终端SSH连接远程服务器讲解

    Mac使用Shell(终端)SSH连接远程服务器 前提:要有你需要连接服务器ip,端口号,服务器上账户和密码 1、首先打开终端,然后输入sudo su - 回车进入根目录 2、然后输入:ssh -...p 端口号 服务器用户名@ip (例如ssh -p 22 userkunyu@119.29.37.63)回车,到这会让你输入yes或者no来确认是否连接,输入yes回车 3、然后输入在服务器上用户密码回车...Mac通过自带Terminal终端SSH远程连接Linux服务器 1.在win时候Xmanager,里面的Xshell工具贼方便,但不支持os,在网上获知mac可以直接在terminal终端通过ssh...2.连接命令格式很简单: $ ssh root@xx.xxx.xx.xx ssh 空格 用户名@目标机器IP地址 值得注意是,这里可能会遇到2种情况 后台哥们儿设置密码包含了一个字段:p0st...然后是第二种情况也是网上遇到比较多,此前我已经设置过了所以密码正确之后就直接连成功了: permission denied 或者 authentication denied,意思是权限不足 这里需要修改一个配置文件值就可以通过

    10.3K71

    使用SSH隧道保护三层Rails应用程序通信

    在本教程,您将在三层配置中部署Rails应用程序,方法是在三个单独服务器上安装一组唯一软件,配置每个服务器及其组件以进行通信和协同工作,并使用SSH隧道保护它们之间连接。...退出SSH连接到 数据库服务器 ,然后退出 tunnel 用户: app-server$ exit ​ app-server$ exit 您在步骤设置SSH连接构成了SSH隧道基础,这将实现三个服务器层之间安全通信...第四步 - 设置到数据库服务器SSH隧道 在最后一步,您从本地服务器访问远程服务器上命令提示符。SSH隧道允许您通过将来自本地主机上端口流量隧道传输到远程端口上端口来完成更多操作。...启动psql客户端并告诉它连接localhost。您还必须指定端口5433以通过SSH隧道连接到 数据库服务器 上PostgreSQL实例。...与您在第四步执行过程类似,您将通过设置另一个SSH隧道来完成此操作。此隧道将允许 Web服务器 上Nginx 通过加密连接安全地连接到 应用程序服务器 上Puma 。

    5.7K30

    SuperEdge 云边隧道新特性:从云端SSH运维边缘节点

    端口)绑定 user 通过SSH动态转发(ssh -D)与 master-A 建立 SSH 隧道同时在本地监听 local-port 端口 local-port 请求都会通过 SSH 连接传到...pod-B(R.1.2) pod-B 收到请求后将请求通过隧道转发到 node-A tunnel-edge,tunnel-edge 将请求转发到 SSH Server 本方案优势 在云端和边缘节点间隧道不会映射端口...,避开端口管理 减少了请求过程建立连接数,减少了出错概率 云端和边端隧道具备断开重连机制,降低维护成本 云边隧道建立 使用 gRPC[3] 开源项目搭建长连接隧道,gRPC  实现断开重连机制...token 信息,验证通过后,节点请求信息节点名和本 pod podIp 写入到 coredns tunnel-cloud 返回 gRPC 连接建立成功消息 tunnel-edge 和 tunnel-cloud...(StreamMsg.Type 为 connecting) tunnel-cloud 会根据 HTTP CONNECT 请求信息获取云端和边端节点隧道,并通过云边隧道向 tunnel-edge 发送自定义协议消息用于与

    92040

    typescript编写node应用部署在docker遇到问题

    问题 无法使用pm2,因为pm2会后台运行,docker作为容器时,如果无前台运行进程,将关闭容器。 无法使用pm2-runtime,因为pm2-runtime尚不支持ts-node。...解决方案 方案1:使用 ts-node 跳过pm2直接运行项目 方案2:使用 tsc 把ts编译为js,再使用pm2运行项目 方案3:重新编译pm2-runtime,增加其支持ts能力 方案1做法,...是比较可取,因为我们使用docker作为容器,其本身就具有自动重启等特点,所以再增加pm2对进程进行保护是多余,且存在性能损耗。...方案2需要改动项目的配置,在测试环境和本地开发环境不使用docker,则需要做兼容,改动较大,且由于方案1存在,该方案性价比较低。 方案3,性价比更低。

    1.7K10

    Windows系统使用Tabby终端工具远程ssh连接本地Linux服务器

    除此之外,Tabby还支持docker插件,可以快速连接docker容器。...4.2 Tabby远程ssh连接ubuntu 我想要使用当前Windows系统通过Tabby远程ssh连接本地局域网内Linux服务器,可以先在设置界面中点击新建,然后选择新配置,再选择ssh连接:...(如果要创建其他服务公网地址需要点击创建隧道进行配置) 然后点击下方在线隧道列表,可以看到ssh公网地址: 5.2 使用公网地址远程ssh连接 现在,我们可以回到Windows系统Tabby,...对本地内网ubuntu ssh连接重新进行配置: 把之前ubuntu主机地址替换为上边使用cpolar内网穿透生成公网地址与端口,点击保存即可: 然后,我们再次点击ssh连接,即可看到在公网环境也能成功远程...返回登录cpolar web UI管理界面,点击左侧仪表盘隧道管理——隧道列表,找到所要配置ssh隧道,点击右侧编辑: 修改隧道信息,将保留成功TCP地址配置到隧道 域名类型:选择固定TCP端口

    34820

    『中级篇』overlay网络和etcd实现多机容器通信(31)

    ping通 启动2个窗口,查看各自ip 信息vagrant ssh docker-node1 ip a docker-node1 [1240] docker-node2vagrant ssh docker-node2...,通过将VM或物理服务器发出数据包封装在UDP,并使用物理网络IP/MAC作为报文头进行封装,然后在IP网络上传输,到达目的地后由隧道终结点解封装并将数据发送给目标虚拟机或物理服务器。...:2379 --cluster-advertise=172.28.128.4:2375& exit vagrant ssh docker-node2 sudo docker network ls docker-node1...sudo docker network ls [1240] docker-node1 查看网络信息sudo docker network inspect demo[1240] 创建连接demo网络容器...容器,查看tes11t1ip地址sudo docker exec tes11t1 ip a docker-node2容器,查看tes11t1ip地址sudo docker exec test111

    1.1K90

    基于隧道Kubernetes跨集群通讯

    环境要求: 组件 版本 备注 kubernetes 1.21.5以上(包含) 要求有两个集群,且至少其中一个集群node节点可以访问另外一个集群某一个node节点。...docker 18.09.5 打镜像 go 1.19 用于开发隧道代理及模拟业务服务 01 单隧道单服务访问 先介绍一下最简单场景,让集群A服务访问集群B服务,架构图如下: 集群A和集群B...由一条隧道连接隧道左边是代理了隧道入口service,隧道右边是一个业务服务,我们在左边集群A在宿主机上通过curl+ip方式(或者在容器通过域名方式)访问集群B业务服务。...创建隧道,我们使用ssh命令来创建一个ssh隧道,在clusterB上执行如下命令: ssh -NR *:8079:localhost:31080 root@[集群A隧道入口机器IP] 其中8079...IP]:31050/albums curl http://[集群A宿主机IP]:31051/albums 或者在浏览器里访问上面的地址,结果如下: 05 结束语 以上我们通过ssh隧道实现了跨集群访问

    1.7K31
    领券