用一台能够公网访问的host作为跳板机,转发不同端口到内网目标机的ssh端口,进而实现ssh远程登录。
配置中将会用到的SSH参数:
-
反向代理 ssh -fCNR
-
正向代理 ssh -fCNL
-g:允许远程主机连接主机(host)的转发端口;
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地主机指定的端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
- 设置反向代理,将跳板机代理端口连接请求转发至本机端口,目标机执行:
- 安装SSL库
$wget http://www.openssl.org/source/openssl-1.0.1j.tar.gz
$tar -zxvf openssl-1.0.1j.tar.gz
$cd openssl-1.0.1j
$./config && make && make install
- 安装autossh
$ sudo yum install wget gcc make
$ wget http://www.harding.motd.ca/autossh/autossh-1.4e.tgz
$ tar -xf autossh-1.4e.tgz
$ cd autossh-1.4e
$ ./configure
$ make
$ sudo make install
- 配置ssh免登陆
a. 目标机执行:
$ssh-keygen -t rsa
$scp ~/.ssh/id_rsa.pub root@1.1.1.1:~/.ssh
b. 跳板机执行:
$cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
- 自动重连 + 反向代理
$autossh -M [port-alaive] -NfR [host1-foreign]:[port-proxy]:[host2]:[port2] -o ServerAliveInterval=60 [user1]@[host1-foreign] -p [port1]
[user1] 跳板机用户名
[host1-foreign] 跳板机公网地址
[port1] 跳板机端口
[host2] 目标机地址
[port2] 目标机端口
[port-proxy] 代理端口
[port-alaive] 心跳端口
$autossh -M 10021 -NfR 1.1.1.1:10011:10.61.46.54:22 -o ServerAliveInterval=60 root@1.1.1.1 -p 9892
#输入跳板机密码
- 跳板机本机测试,跳板机执行:
$ssh [user]@127.0.0.1 -p [port-proxy]
[user]为目标机用户名
[port-proxy] 代理端口
$ssh root@127.0.0.1 -p 10011
#输入目标机密码
- 启用公网访问目标机(建立本机公网到本机localhost的隧道的正向代理),跳板机执行:
$ssh -g -L [port-listen]:localhost:[port-proxy] [user]@[host-foreign] -p [port]
[user] 跳板机用户名
[host-foreign] 跳板机公网地址
[port] 跳板机端口
[port-listen] 跳板机监听端口,外网访问
[port-proxy] 代理端口
$ssh -g -fN -L 9891:localhost:10011 root@1.1.1.1 -p 9892
#输入跳板机密码
- 本机测试:
$ssh [user]@[host-foreign] -p
[port-listen]
[user] 跳板机用户名
[host] 跳板机公网地址
[port-listen] 跳板机监听端口
ssh root@1.1.1.1 -p 9891