linux中SSH Tunnel的简单使用例子

背景介绍:

目前,线上有好几个数据中心,不同数据中心之间的速度差异还是比较大的,我们一般选择一个最优的数据中心作为VPN的接入点。
但有些时候直接通过VPN访问其它数据中心的服务会很慢,于是就临时通过SSH Tunnel来解决。

应用场景:

直接访问服务器idc1-server1很快,但是直接访问idc2-server2很慢,而idc1-server1到idc2-server2却很快;
于是,我们打算用idc1-server1服务器作为跳板来连接idc2-server2。

ssh -i /path/to/sshkey -l username -f -N -T -L 8088:idc2-server2:80 idc1-server1

通过浏览器直接访问http://localhost:8088就相当于访问了http://idc2-server2

关键参数介绍:

-L 8088:idc2-server2:80

将本地的某个端口转发到远端指定机器的指定端口。工作原理是:本地机器上分配了一个socket侦听port端口,一旦这个端口上有了连接, 该连接就经过安全隧道(idc1-server1)转发出去,即
 localhost:8088 -> (idc1-server1) -> idc2-server2:80;

ssh -i /path/to/sshkey -l username -f -N -T -L 2022:idc2-server2:22 idc1-server1
通过scp可以将文件通过idc1-server1中转后传送到idc2-server2中:
scp -i /path/to/sshkey -P 2022 upload_file_name.tgz dong@localhost:/path/to/upload/

假设

位于公网的客户端是10.66.0.78(当然事实上这是一个私网IP),
公司有一个暴露在公网的主机,公网IP是10.66.0.190(当然事实上这还是一个私网IP),公司私网的IP是192.168.200.20,
我在公司真正要登录的主机是192.168.200.100。
那么我可以做如下操作

方法1

在 10.66.0.190上执行
[root@dhcp-0-190 ~]# ssh -Nf -L 10.66.0.190:10000:localhost:22 192.168.200.100

方法2

a. 在10.66.0.190上修改配置文件/etc/ssh/sshd_config
开启

GatewayPorts yes
然后重新载入sshd配置
[root@dhcp-0-190 ~]# service sshd reload
Reloading sshd:                                            [  OK  ]
 
b. 然后在192.168.200.100上执行

[root@localhost ~]# ssh -Nf -R 10.66.0.190:10000:192.168.200.100:22 192.168.200.20
 
然后我们就可以在公网通过访问10.66.0.190:10000端口来连接192.168.200.100的22端口了。
 
安全因素

大家看我上面其中2条命令
# ssh -Nf -L 10000:localhost:80 209.132.177.100
# ssh -Nf -L 10.66.0.190:10000:localhost:22 192.168.200.100
再看下ssh tunnel用例
-L [bind_address:]port:host:hostport
bind_address默认是127.0.0.1
 
格式是

[要打开的监听IP:]要打开的监听端口:要映射到的监听IP:要隐射到的监听端口
 
为什么有时候用locahost,有时候用10.66.0.190?
如果说ssh tunnel打开的端口只需要给本机用到,那么就让端口只在回环接口监听,如果需要让别的机器共享ssh tunnel打开的端口,则需要让ssh在可访问的IP上打开端口了。
 
总之处处小心,设好安全权限,防止入侵。

Ssh tunnel通常能实现3种功能

1)   加密网络传输

2)   绕过防火墙

3)   让位于广域网的机器连接到局域网内的机器

时间: 2024-11-10 11:27:09

linux中SSH Tunnel的简单使用例子的相关文章

linux中expect实现自动登录的例子

使用expect实现简单自动登录,从网上看了几个脚本不错,借鉴一下 NO.1 #!/bin/sh auto_login_ssh(){ expect -c " set timeout -1; spawn -noecho ssh -o StrictHostKeyChecking=no $2 ${@:3}; expect *assword:*; send -- $1\r; interact;" } auto_login_ssh password user@hostname StrictHos

linux中useradd增加用户简单方法

在 Linux 系统中,与用户管理有关的文件主要有如下几个:分别是/etc/passwd,/etc/shadow,/etc/gfoup,/etc/gshadow .它们分别与用户的账号,密码,用户组及用户组密码有关. 所以创建新账号的过程也就是和这几个文件在打交道,不过不要害怕,通过 useradd 命令来创建新账号,系统会自动与这些文件进行操作不用咱手动一个一个的来更改,这样也不用担心出错的问题.呵呵. (1)最简单的方法: useradd -m username 再在/home 目录下建立一

linux中ssh公钥认证配置例子

在两台linux主机上由于环境的需要,经常要配置两台主机之间免密码登录,这就要用到key认证,也就是所谓的公私钥认证.便于理解,我这里指定两台主机为 A 和 B .如果A主机想免密码登录到B主机上,则A主机上存放私钥,B 主机上存放公钥.通过ssh-keygen 命令生成的两个文件为:公钥文件 ~/.ssh/id_rsa.pub: 私钥文件 ~/.ssh/id_rsa .而B主机上存放公钥时,需要将id_rsa.pub的内容存放到~/.ssh/authorized_keys 文件内,并且保证权限

linux中ssh快速备份数据库例子

先进入你需要备份到的文件夹,然后执行如下命令 备份数据库,ssh命令:mysqldump -p 数据库名 -u 数据库用户名 > bak.sql(也可以是你希望的文件名称) 不压缩备份 mysqldump -p 数据库名-u 数据库用户名> bak.sql gz压缩备份 mysqldump -p 数据库名 -u 数据库用户名 | gzip > wuxiaowu.sql.gz zip压缩备份 mysqldump -p 数据库名 -u 数据库用户名 | gzip > wuxiaowu.

Linux中SSH端口号更改方法介绍

 SSH端口默认是22了,我们为了服务器的安全一般会把SSH端口22修改成其它的端口好了,下文小编来各位整理一篇SSH端口修改教程供各位参考.   vps一到手,第一件事就是更改ssh端口,使用一个不容易被拆解的端口号,防止被黑. 更改端口号是通过修改SSH的配置文件实现的,登录ssh后,输入: vim /etc/ssh/sshd_config 向下找到#Port 22这段 进入vi插入模式,进行编辑 删除掉Port 22前面的#,然后下一行输入新的端口号如:Port 10000(这个你自己定,

Linux中SSH端口修改与禁止Root远程登陆方法总结

操作系统:CentOS release 5.5 (Final) 编辑配置文件: #vi /etc/ssh/ssh_config Port 22 #加入新的 Port 值 Port 10124 编辑配置文件: vi /etc/ssh/sshd_config Port 22 #加入新的 Port 值 Port 10124 生产机器禁止ROOT远程SSH登录:     #vi /etc/ssh/sshd_config     把     PermitRootLogin yes     改为     P

linux中iscsi服务应用搭建的例子

一.ISCSI连接的相关概念 SCSI:小型计算机系统的接口 (Small Computer System Interface),ISCSI(Internent Small Computer System Interface)较SCSI协议多了一个Internet,就是基于以太网传输的SCSI协议.日常应用中非常常见的一个应用,提供存储服务的一端通常被称为iSCSI target ,使用存储空间的一段被称作iSCSI initiator .iSCSI initiator连接存储端的方式有三种:

html5中canvas的一个简单的例子

买了两本关于HTML5的书,一本<HTML5揭秘>,一本<HTML5高级程序设计>,现在在看<html5揭秘>网上说这本书是非常入门的一本,<HTML5权威指南>就相对深一点.所以买了揭秘,没买指南.都说HTML5的canvas很重要,所以这里把书上关于canvas的一些简单例子,给试着自己写了一遍,放上来把  代码如下 复制代码 window.onload = function(){     var canvas = document.getElement

linux中批量查找替换文本内容例子

  .批量查找某个目下文件的包含的内容,例如: # grep -rn "要找查找的文本" ./ 2.批量查找并替换文件内容. # sed -i "s/要找查找的文本/替换后的文本/g" `grep -rl "要找查找的文本" ./` sed的其他用法如下: 1.删除行首空格 sed 's/^[ ]*//g' filename sed 's/^ *//g' filename sed 's/^[[:space:]]*//g' filename 2.行