SSH反向连接及Autossh

转自: http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html

SSH反向连接及Autossh

0.接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,当然你肯定做不了Port Forwarding,除非你想在公司防火墙上拆个洞)。稍懂一点网络的童鞋会明白,Internet上去主动连接一台内网是不可能的,一般的解决方案分两种,一种是端口映射(Port Forwarding),将内网主机的某个端口Open出防火墙,相当于两个外网主机通信;另一种是内网主机主动连接到外网主机,又被称作反向连接(Reverse Connection),这样NAT路由/防火墙就会在内网主机和外网主机之间建立映射,自然可以相互通信了。但是,这种映射是NAT路由自动维持的,不会持续下去,如果连接断开或者网络不稳定都会导致通信失败,这时内网主机需要再次主动连接到外网主机,建立连接。

1.理论的介绍完了,下面实际操作:

A要控制B

A主机:外网,ip:123.123.123.123,sshd端口:2221

B主机:内网,sshd端口:2223

无论是外网主机A,还是内网主机B都需要跑ssh daemon

首先A,我们开启SSHD的GatewayPorts选项。

vim /etc/ssh/sshd_config
# 找到GatewayPorts选项,将其变为yes
GatewayPorts yes

# 重启sshd服务
service sshd restart

1.1.首先在B上执行

$ ssh -NfR 1234:localhost:2223 [email protected] -p2221

这句话的意思是将A主机的1234端口和B主机的2223端口绑定,相当于远程端口映射(Remote Port Forwarding)。

这里每次需要输入A主机user1的登陆密码,后面会讲到解决办法。

1.2.这时在A主机上sshd会listen本地1234端口

$ ss -ant
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      128               127.0.0.1:1234                     *:*

1.3.像平时一样连接到A主机的1234端口就可以控制内网B主机了

$ ssh localhost -p1234

2.一开始提到,这种反向连接(Reverse Connection)不稳定,可能随时断开,需要内网主机B再次向外网A发起连接,这时需要个“朋友”帮你在内网B主机执行这条命令。它就是Autossh。

在此之前还要解决之前的一个问题,那就是每次内网主机B连接外网主机A时都需要输入密码,这个问题ssh本身是提供另外一种验证方式——通过密钥验证用户身份,实现自动登录。

2.1.在内网B主机上生产公钥和私钥

$ ssh-keygen
...(一直按Enter,最后在~/.ssh/下生成密钥)
$ ls ~/.ssh/
id_rsa id_rsa.pub known_hosts

2.2.复制B主机上生成的id_rsa.pub公钥到外网A主机上,并将内容加入到~/.ssh/authorized_keys中

$ cat id_rsa.pub >> ~/.ssh/authorized_keys

试下,内网B主机连接外网A主机,就不再输入密码验证了

补充:今天了解到ssh-copy-id这个命令,上面这个操作就变的简单了

$ ssh-copy-id [email protected]

2.3.再来看看Autossh的用法

$ autossh -M 5678 -NR 1234:localhost:2223 [email protected] -p2221

比之前的命令添加的一个-M 5678参数,负责通过5678端口监视连接状态,连接有问题时就会自动重连,去掉了一个-f参数,因为autossh本身就会在background运行。

3.终极方案:当重启内网B主机,谁来自动Autossh呢,加入daemon吧

以daemon方式执行,相当于root去执行autossh, ssh,这时刚才普通用户目录下的.ssh/authorized_keys文件会不起效。有两种办法解决,一种是用autossh的参数指定.ssh路径;另外一种是以普通用户身份执行daemon,下面是第二种方式。

/bin/su -c ‘/usr/bin/autossh -M 5678 -NR 1234:localhost:2223 [email protected] -p2221‘ - user1

autossh还有很多参数,用来设置重连间隔等等。

将上面命令放入下面各启动方式中,根据自己系统自己配置:

SysV:/etc/inid.d/autossh

Upstart: /etc/init/autossh.conf

systemd: /usr/lib/systemd/system/autossh.service

P.S.

1.家里是ADSL的话,用DDNS,解决ip问题

2.外网有路由的可设下端口映射

3.虽然有密钥和密码保护,但还请小心使用

时间: 2024-12-17 06:42:19

SSH反向连接及Autossh的相关文章

[转]SSH反向连接及Autossh

http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html SSH反向连接及Autossh 0.接触Linux恐怕对SSH再熟悉不过了,还有scp,sftp各种方便的功能,一般的使用都需要ip:port(如果不是默认22的话),但有些情况比较特殊,就是想连接一台内网主机(比如公司内网,当然你肯定做不了Port Forwarding,除非你想在公司防火墙上拆个洞).稍懂一点网络的童鞋会明白,Internet上去主动连接一台内网是不

利用ssh反向代理以及autossh实现从外网连接内网服务器

1. 描述一下目前的机器状况,梳理梳理: 机器 IP 用户名 备注 A 10.21.32.106 gdut728 目标服务器,处于内网 B 123.123.123.123 root 外网服务器,相当于桥梁的作用 PS:123.123.123.123只是我随意起的,大家请别攻击别人的服务器啊啊啊 2. 解决方法: 通俗地说:就是在机器A上做到B机器的反向代理:然后在B机器上做正向的代理实现本地端口的转发 2.1 实现前的准备 每台都要安装ssh的客户端. 在这里我使用的是centos7,都自带ss

ssh 反向连接

原始ssh方式: ssh -p 公网服务器ssh端口 -CqTfnN -R 0.0.0.0:公网映射出去的端口(被访问):192.168.1.8(内网ip):22 [email protected]公网ip例如: ssh -p 1122 -CqTfnN -R 0.0.0.0:1123:192.168.1.8:22 [email protected] 用autossh方式: autossh -M 5678 -NR 1123:localhost:22 [email protected] -p 112

利用云主机做 ssh 反向隧道

[背景] 有三台主机 A.S.B,系统均为Linux.主机 A 和主机 B 在各自不同的内网,主机 S 为一台具有公网 IP 的云主机.主机 A 与主机 B 都可以通过 ssh 连接主机 S.如下图: [需求] 主机 A 需要通过主机 S 连接主机 B. 主机A信息: ip [方法] 1.设置主机 S. 1.1.编辑 /etc/ssh/sshd_config 文件,在里面修改或添加: GatewayPorts yes 1.2.重启 sshd 服务. sudo service sshd resta

ssh反向主动连接 及脚本加密

近来,在为公司客户部署相关DNS系统服务,用于资源调度服务,但是客户出口缺少公网ip地址,不能方便的去管理这台服务器,开始想到使用teamviewer做中转,穿透内网,但是在Centos环境下,照teamviewer官方给出的手册尝试安装多次,未果,始终未能获取ID号,甚至最后都安装了图形gnome环境,尝试在图形环境下安装teamviewer,网络始终是notReady,最后,只能放弃使用teamviewer,在公司找了台有公网ip的机器,用ssh反向主动连接,也就是常说的端口转发. 这种方式

使用ssh正向连接、反向连接、做socks代理的方法

ssh -L 219.143.16.157:58080:172.21.163.32:8080 用户名@localhost -p 10142 在 219.143.16.157机器执行   将ssh隧道打通 将172.21.163.32:8080 映射到本机58080上 1.用ssh做正向连接 啥叫正向连接?就是client连上server,然后把server能访问的机器地址和端口(当然也包括server自己)镜像到client的端口上. 命令: ssh -L [客户端IP或省略]:[客户端端口]:

买阿里云 搭建ssh反向远程连接

1,创建反向链接 [email protected]:~$ ssh -f -N -R 8888:localhost:22 [email protected] OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014 debug1: Reading configuration data /home/chunli/.ssh/config debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ss

ssh做反向连接之我的实践

在公司内有一台服务器,是在多重局域网之下的. 我在家的时候向访问这服务器,查攻略,最后按如下方式解决: 假设服务器A的ip 为192.168.100.100    用户名为aa 我的电脑B的ip为    D.D.D.D    用户名为bb 我通过一个具有公网ip的电脑C把A,B链接起来,C的ip为 C.C.C.C     用户名为cc Step1:在A上执行 ssh -f -N -R 10000:localhost:22 [email protected] 这一步让A主动建立反向连接    St

SSH反向代理

问题描述 很多人肯定碰到这样一个问题:自己办公室的电脑回家之后就没法通过家里的电脑远程连接过来了.除非通过拨通VPN或者其他方式先连接到公司内网.如果公司没有VPN,那么我们如何通过SSH连接到公司的电脑呢?这里我们可以使用SSH反向代理 实验环境 机器编号 IP 用户名 备注 A 172.16.206.131 aaa 目标服务器,在局域网中,可以访问 A B 10.10.10.206 bbb 代理服务器,在外网中,无法访问 A C 10.10.10.202 可以直接访问 B,无法直接访问 A