ssh笔记

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  ]
  1. 本地端口转发
 ssh -CqTfnN -L 2121:host2:21 host3 # 本地端口:目标主机:目标主机端口
  1. 远程端口转发
 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: [email protected]
# 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 &

ps

使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化

猜你喜欢

转载自blog.csdn.net/blueblueuueew/article/details/79330766
ssh