常用命令(运维)

rsync

从远程机器同步到本地并删除目标比源目录多余的文件
rsync -avzP --delete -e 'ssh -p port' root@{remoteHost}:{remoteDir} {localDir} --exclude=dirname
从本地机器同步到远程并删除目标比源目录多余的文件
rsync -avzP --delete -e 'ssh -p port' {localDir} root@{remoteHost}:{remoteDir} --exclude=dirname

ssh隧道使用(-R)

运维的过程中间,如果碰到一个内网的机器,ip为内网的dhcp自动获取(可能ip在未来的一次重启的时候发生了变化),都可以通过在一个公网的机器上面打一个反向隧道

方案一:(配合crontab使用)
#!/bin/bash
# 公网做转发到内网,在公网上面创建一个隧道到内网机器上面,并对该隧道进行监控,配合crontab使用,该脚本执行前首先创建内网机器到公网机器的免密隧道

ROMOTE_USERNAME="root"
ROMOTE_SERVER_IP="154.9.157.30"	# 公网ip
ROMOTE_PORT=22
TUNNEL_PORT=5022
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

PID=$(/usr/bin/ssh -l ${ROMOTE_USERNAME} ${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT} netstat -nptl | grep ${TUNNEL_PORT} | grep sshd | awk '{print $NF}' | cut -d '/' -f 1)
PID=${PID%%/*}
if [ -n "$PID" ];then
    IS_LISTEN=$(/usr/bin/ssh -l ${ROMOTE_USERNAME} ${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT} netstat -nptl | grep ${PID} | grep sshd | grep LISTEN | wc -l)
    if [ "$IS_LISTEN" -ne "0" ];then
        exit 0
    else
        /usr/bin/ssh -l ${ROMOTE_USERNAME} ${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT} kill -9 ${PID}
        /usr/bin/ssh -CqTfnN -R 0.0.0.0:${TUNNEL_PORT}:${LOCALHOST_IP}:${LOCALHOST_PORT} ${ROMOTE_USERNAME}@${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT}
    fi
else
    /usr/bin/ssh -CqTfnN -R 0.0.0.0:${TUNNEL_PORT}:${LOCALHOST_IP}:${LOCALHOST_PORT} ${ROMOTE_USERNAME}@${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT}
fi

方案二:(内网机器启动之后执行,while死循环)
#!/bin/bash
# 公网做转发到内网,在公网上面创建一个隧道到内网机器上面,并对该隧道进行监控
while [ true ]
do
    ROMOTE_USERNAME="root"
    ROMOTE_SERVER_IP="154.9.187.30"	#公网ip
    ROMOTE_PORT=22
    TUNNEL_PORT=5022
    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
    PID=$(/usr/bin/ssh -l ${ROMOTE_USERNAME} ${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT} netstat -nptl | grep ${TUNNEL_PORT} | grep sshd | awk '{print $NF}' | cut -d '/' -f 1)
    PID=${PID%%/*}
    if [ -n "$PID" ];then
        IS_LISTEN=$(/usr/bin/ssh -l ${ROMOTE_USERNAME} ${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT} netstat -nptl | grep ${PID} | grep sshd | grep LISTEN | wc -l)
        if [ "$IS_LISTEN" -ne "0" ];then
            sleep 30
        else
            /usr/bin/ssh -l ${ROMOTE_USERNAME} ${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT} kill -9 ${PID}
            /usr/bin/ssh -CqTfnN -R 0.0.0.0:${TUNNEL_PORT}:${LOCALHOST_IP}:${LOCALHOST_PORT} ${ROMOTE_USERNAME}@${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT}
        fi
    else
        /usr/bin/ssh -CqTfnN -R 0.0.0.0:${TUNNEL_PORT}:${LOCALHOST_IP}:${LOCALHOST_PORT} ${ROMOTE_USERNAME}@${ROMOTE_SERVER_IP} -p ${ROMOTE_PORT}
    fi
done

猜你喜欢

转载自blog.csdn.net/Escid/article/details/89181444