ssh(localforward)

本文解析了SSH的本地端口转发(Local Forwarding)原理,即如何通过一台中间服务器(踏み台)建立本地机器与远程数据库之间的连接。通过配置~/.ssh/config文件中的LocalForward指令,实现从本地特定端口到远程服务器指定端口的数据转发,进而实现在Tableau等工具中通过localhost连接远程数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因是我的~/.ssh/config里有这样几行:

Host    D1 
    HostName    35.161.xx.xxx
    Port        222
    User        na.xxxx
    IdentityFile    ~/.ssh/id_rsa
    LocalForward    15439 redshift-db.xxxx.amazonaws.com:15439

其中35.161.xx.xxx是某台服务器(就叫S1吧)。
S1是个踏み台,本地机器会通过S1来连接到D1(redshift的数据库)。

然后,打开终端输入ssh D1之后,我就可以在tableau连接数据时,输入localhost来连接到D1.

想知道原理是啥,于是查了查。


https://qiita.com/t_uda/items/3d0547fa716f97449c64
根据这篇文章,

ssh -L aaaa:proxy.domain:bbbb myname@where.is.myhost

就相当于~/.ssh/config里的

Host myhost
    HostName where.is.myhost
    User myname
    LocalForward aaaa proxy.kuins.net:bbbb

这样的话,我的文件里就相当于

ssh -L 15439:redshift-db.xxxx.amazonaws.com:15439 na.xxxx@35.161.xx.xxx

然后我去查了ssh -L是什么。
http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html

“本地端口转发”(Local forwarding)。
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
我们在host1执行下面的命令:

ssh -L 2121:host2:21 host3

命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口

ftp localhost:2121

“本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道”。

下面是一个比较有趣的例子。

ssh -L 5900:localhost:5900 host3

它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
另一个例子是通过host3的端口转发,ssh登录host2。

ssh -L 9001:host2:22 host3

这时,只要ssh登录本机的9001端口,就相当于登录host2了。

ssh -p 9001 localhost

上面的-p参数表示指定登录端口。

### 如何在Linux中快速通过SSH连接到远程服务器 为了实现高效安全地访问远程服务器,在Linux环境中使用SSH(Secure Shell)协议是一种标准做法。最佳实践建议配置公钥认证来简化登录过程,从而无需每次输入密码。 #### 配置无密码登录 首先创建一对加密密钥用于身份验证: ```bash ssh-t rsa -b 4096 -C "your_email@example.com" ``` 这将在`~/.ssh/`目录下生成私钥(`id_rsa`)和公钥(`id_rsa.pub`)文件。接着把公钥复制到目标机器上: ```bash ssh-copy-id user@remote_host ``` 此后可以直接运行命令连接至远程主机而不需要再手动输入密码[^1]。 #### 使用SSH配置文件优化体验 编辑本地用户的`.ssh/config`文件可以进一步提升便捷度。添加如下条目定义常用参数: ```plaintext Host shortcut_name HostName actual_remote_hostname_or_ip User your_username_on_remote IdentityFile ~/.ssh/id_rsa ``` 现在只需键入`ssh shortcut_name`即可迅速建立连接[^2]。 #### 利用代理转发提高效率 对于需要经过跳板机才能抵达最终目的地的情况,设置动态端口转发功能非常有用。可以在上述配置基础上增加几行指令开启此特性: ```plaintext LocalForward localhost:8080 target_server:port_number ProxyJump jumpbox_user@jumpbox_address ``` 这样不仅能够直接穿透多层网络结构直达内部资源,还支持浏览器等应用利用 SOCKS5 代理方式浏览内网网页内容[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值