ssh port forwarding(ssh端口转发)

SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能。它可以建立一条安全的SSH通道,并把任意的TCP连接放到这条通道中。下面仔细就仔细讨论SSH的这种非常有用的功能。


SSH Tunnel有三种,分别是本地Local(ssh -NfL),远程Remote(ssh -NfR),动态Dynamic(ssh -NfD)。(含义参考man ssh


说明:在我们举例说明用法之前,先假设你有一台SSH机器,它的IP是a.b.c.d。

1:本地Local(ssh -NfL)
ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
ssh -NfL  a.b.c.d : 1234 : www.google.com : 80   a.b.c.d

此时,在浏览器里键入:http://a.b.c.d:1234,就会看到Google的页面了。

在绑定1234端口的时候,可以省略前面的ip,如此一来,1234端口就仅仅绑定在localhost地址上,更安全:

ssh -NfL  1234 : www.google.com : 80   a.b.c.d

此时浏览的话就要在a.b.c.d机器上使用http://localhost:1234了。

何时使用本地Tunnel?

比如说你在本地访问不了某个网络服务(如www.google.com),而有一台机器(如:a.b.c.d)可以,那么你就可以通过这台机器来访问。


2:远程Remote(ssh -NfR)
ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
在需要被访问的内网机器上运行: ssh -NfR  1234 : localhost : 22   a.b.c.d

登录到a.b.c.d机器,使用如下命令连接内网机器:

ssh -p  1234   localhost

需要注意的是上下两个命令里的localhost不是同一台。这时你会发现自己已经连上最开始命令里的localhost机器了,也就是执行“ssh -NfR”的那台机器。

何时使用远程Tunnel?

比如当你下班回家后就访问不了公司内网的机器了,遇到这种情况可以事先在公司内网的机器上执行远程Tunnel,连上一台公司外网的机器,等你下班回家后 就可以通过公司外网的机器去访问公司内网的机器了。



3:动态Dynamic(ssh -NfD)-Socket代理
ssh -D  
ssh -NfD  1234   a.b.c.d

a.b.c.c 是server 地址

如此一来就建立了一台Socket代理机器,接着在浏览器上设置Socket代理:地址是localhost,端口是1234,从此以后,你的访问都是加 密的了!你可以通过访问 WhatIsMyIP 来 确认自己现在的IP,看看是不是已经变成a.b.c.d了。

测试阶段,也可以把端口绑定在外网地址上,如此一来,你在浏览器上就可以使用外网地址设置Socket代理,但这仅限于测试,否则,你的机器就不安全了, 随时可能成为肉鸡。对于Windows用户来说,如果讨厌命令行,还可以使用MyEnTunnel来实现同样的功能,配合Firefox的 FoxyPorxy,基本就无敌了,至于具体的配置方法,小崔已经写好了: 使用Firefox+foxyProxy+SSH翻山越岭 。如果你使用的是Chrome的话,则可以选择 Proxy Switchy!来实现同样的效果,恕不多言。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以在 application.yml 文件中使用以下配置来设置 MySQL 的 SSH 通道: ``` spring: datasource: url: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE} username: ${MYSQL_USER} password: ${MYSQL_PASSWORD} jdbcUrl: jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useSSL=false ssh: host: ${SSH_HOST} port: ${SSH_PORT} user: ${SSH_USER} password: ${SSH_PASSWORD} privateKey: ${SSH_PRIVATE_KEY} passphrase: ${SSH_PASSPHRASE} ``` 这里的 ${MYSQL_HOST}、${MYSQL_PORT}、${MYSQL_DATABASE}、${MYSQL_USER} 和 ${MYSQL_PASSWORD} 分别对应 MySQL 服务器的主机名、端口、数据库名、用户名和密码。 ${SSH_HOST}、${SSH_PORT}、${SSH_USER}、${SSH_PASSWORD}、${SSH_PRIVATE_KEY} 和 ${SSH_PASSPHRASE} 分别对应 SSH 代理服务器的主机名、端口、用户名、密码、私钥文件路径和私钥的密码(如果有的话)。 请注意,在使用上述配置之前,你需要确保你已经安装并配置了 MySQL 和 SSH 代理服务器,并且你的应用程序能够访问这些服务器。 ### 回答2: 在application.yml中配置MySQL的SSH通道需要以下几步: 1. 将SSH证书保存到本地。首先,需要通过SSH连接到MySQL服务器。为此,我们需要一个SSH证书,这个证书文件通常以.pem或.ppk结尾。将该证书保存在本地。 2. 在application.yml中配置SSH连接参数。在yml文件中,需要设置SSH连接的主机、端口、用户名、密码和证书路径。以下是一个示例配置: ```yml spring: datasource: url: jdbc:mysql://localhost:3306/database_name?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC # MySQL连接地址,使用SSH通道,需要指定SSH的本地端口号 username: your_username # MySQL数据库用户名 password: your_password # MySQL数据库密码 ssh: enabled: true # 启用SSH通道 host: ssh_host # SSH服务器地址 port: 22 # SSH服务器端口号 username: ssh_username # SSH用户名 password: ssh_password # SSH密码 key-file: path/to/ssh_key.pem # SSH证书的本地路径 ``` 请将其中的`database_name`,`your_username`,`your_password`,`ssh_host`,`ssh_username`,`ssh_password`和`path/to/ssh_key.pem`替换为正确的值。 3. 添加MySQL连接驱动依赖。在项目的pom.xml文件中,确保已添加正确的MySQL连接驱动依赖。以下是一个示例配置: ```xml <dependencies> <!-- 其他依赖 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies> ``` 请将`<version>8.0.23</version>`替换为您使用的MySQL连接驱动的版本号。 通过以上步骤,您可以在application.yml中成功配置MySQL的SSH通道。记得替换相应的参数值,并按需修改其他数据库相关的配置。 ### 回答3: 在application.yml配置文件中配置MySQL的SSH通道,可以通过如下步骤进行配置: 1. 首先,在application.yml中添加MySQL数据库相关的配置信息,包括数据库的host、port、username、password等信息。 例如: ``` spring: datasource: url: jdbc:mysql://localhost:3306/mydatabase username: root password: mypassword driver-class-name: com.mysql.jdbc.Driver ``` 2. 然后,在application.yml中添加SSH通道的配置信息,包括SSH的host、port、username、password等信息。 例如: ``` ssh: host: ssh.example.com port: 22 username: root password: sshpassword ``` 3. 接下来,配置SSH隧道的本地转发规则。通过配置本地端口和目标数据库地址(即MySQL的host和port),将本地请求转发到远程服务器。 例如: ``` ssh: local-port-forwarding: - local-port: 3307 remote-host: localhost remote-port: 3306 ``` 这表示将本地的3307端口转发到远程服务器的localhost:3306上。 4. 最后,通过配置Spring Boot的数据源,将SSH通道应用到数据库连接上。 例如: ``` spring: datasource: url: jdbc:mysql://localhost:3307/mydatabase username: root password: mypassword driver-class-name: com.mysql.jdbc.Driver ``` 配置完成后,应用程序将通过SSH通道连接到远程MySQL数据库。这样,应用程序就可以访问和操作远程MySQL数据库了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值