ssh 可以在两台服务器间建立一条隧道。
因为 elasticsearch 对服务器的配置要求挺高的,而我阿里云上的服务器只有1G内存, 所以服务一直跑不起来,壤中羞涩又买不起高配置的,所以想把 elasticsearch 服务部署在本地的笔记本上, 使用ssh做内网端口映射到公网。
ssh 命令格式
ssh [options] [user@]host [command]
ssh 命令参数
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-n: Redirects stdin from /dev/null. This must be used when ssh is run in the background
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-T Disable pseudo-terminal allocation.
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
使用 ssh 建立端口转发
需要修改sshd_config配置文件
[root@120.25.68.60 ~]# vi /etc/ssh/sshd_config
GatewayPorts yes
[root@120.25.68.60 ~]# service sshd reload
Reloading sshd: [ OK ]
- 本地端口转发
ssh -CqTfnN -L 2121:host2:21 host3 # 本地端口:目标主机:目标主机端口
- 远程端口转发
ssh -CqTfnN -R 2121:localhost:21 host # 远程主机端口:目标主机:目标主机端口
云服务器编写ssh代理关闭脚本 kill_ssh_agent.sh
#!/bin/sh
if [ -n "$1" ] && [ "$1" -gt "0" ];then
PID=$(netstat -anp | grep $1 | awk '/sshd/ && !/awk/{print $7}')
PID=${PID%%/*}
if [ -n "${PID}" ];then
kill -9 $PID && exit 0
fi
fi
exit 1
客户端编写代理链接守护脚本 ssh_agent_deamon.sh
#########################################################################
# File Name: ssh_agent_deamon.sh
# Author: phpdragon
# mail: phpdragon@qq.com
# Created Time: Thu 24 Mar 2016 01:55:49 PM CST
#########################################################################
#!/bin/bash
ROMOTE_USERNAME=root
ROMOTE_SERVER_IP="120.25.68.60"
ROMOTE_PORT=7233
###[ /sbin/ifconfig|sed -n '/inet addr/s/^[^:]*:\([0-9.]\{7,15\}\) .*/\1/p'|grep -v 127.0.0.1 ]
LOCALHOST_IP=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
LOCALHOST_PORT=22
while true ;
do
PID=$(ssh -l root ${ROMOTE_SERVER_IP} netstat -anp | grep ${ROMOTE_PORT} | awk '/sshd/ && !/awk/{print $7}')
PID=${PID%%/*}
if [ -n "$PID" ] && [ "$PID" -gt "0" ];then
sleep 30s
else
/usr/bin/ssh -l root ${ROMOTE_SERVER_IP} /bin/sh /data/kill_ssh_agent.sh ${ROMOTE_PORT}
/usr/bin/ssh -CqTfnN -R 0.0.0.0:${ROMOTE_PORT}:${LOCALHOST_IP}:${LOCALHOST_PORT} ${ROMOTE_USERNAME}@${ROMOTE_SERVER_IP}
fi
done
exit 0
设置ssh连接为长连接
vi /etc/ssh/sshd_config
#每1分钟发送一个心跳信号给客户端
ClientAliveInterval 60
#最大超时次数,客户端不响应则关闭连接
ClientAliveCountMax 3
设置为随机启动
vi /etc/rc.local
/bin/sh /data/ssh_agent_deamon.sh &