運維(雜)

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

爲linux機器打上標識

通常我們進入到一個Linux機器上面,可能是如下樣貌
在這裏插入圖片描述
通過加上一個配置之後,就能夠呈現如下的樣貌
在這裏插入圖片描述
這裏只需要在/etc/profile裏面配置上如下的內容即可

export PS1='\n\e[1;37m[\e[m\e[1;32m\u\e[m\e[1;33m@\e[m\e[1;35m\H\e[m \e[4m`pwd`\e[m\e[1;37m]\e[m\e[1;36m Company_Machine\e[m \n\$'

screen加上配置

如果想要讓screen變得更好用,可以在用戶家目錄下創建一個 .screenrc 文件,中間內容如下

# Set default encoding using utf8
defutf8 on


## 解決中文亂碼,這個要按需配置
defencoding utf8
encoding utf8 utf8


#兼容shell 使得.bashrc .profile /etc/profile等裏面的別名等設置生效
shell -$SHELL

#set the startup message
startup_message off
term linux

## 解決無法滾動
#termcapinfo xterm|xterms|xs ti@:te=\E[2J
# Change the xterm initialization string from is2=\E[!p\E[?3;4l\E[4l\E>
# # (This fixes the "Aborted because of window size change" konsole symptoms found
# #  in bug #134198)
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

altscreen on

# 屏幕緩衝區行數
defscrollback 10000

# 下標籤設置
hardstatus on
caption always "%{= kw}%-w%{= kG}%{+b}[%n %t]%{-b}%{= kw}%+w %=%d %M %0c %{g}%H%{-}"

#關閉閃屏
vbell off

#Keboard binding
# bind Alt+z to move to previous window
bindkey ^[z prev
# bind Alt+x to move to next window
bindkey ^[x next

# bind Alt`~= to screen0~12
bindkey "^[`" select 0
bindkey "^[1" select 1
bindkey "^[2" select 2
bindkey "^[3" select 3
bindkey "^[4" select 4
bindkey "^[5" select 5
bindkey "^[6" select 6
bindkey "^[7" select 7
bindkey "^[8" select 8
bindkey "^[9" select 9
bindkey "^[0" select 10
bindkey "^[-" select 11
bindkey "^[=" select 12
# bind F5 to create a new screen
bindkey -k k5 screen
# bind F6 to detach screen session (to background)
bindkey -k k6 detach
# bind F7 to kill current screen window
bindkey -k k7 kill
# bind F8 to rename current screen window
bindkey -k k8 title

mac vim增加配置

在用戶家目錄下,創建一個 .vimrc 文件

syntax on
set nu
set hlsearch

配置 .ssh/config 文件

如果電腦使用的是iterm2或者是linux系統,通過配置 .ssh/config文件能夠方便登陸服務器和打通隧道

Host mine
       Hostname 40.80.21.139
       User shelter
       Port 22
Host env1
       Hostname 127.0.0.1
       Port 12345
       ProxyCommand ssh -q -x -W %h:%p mine
       User root

如果需要打通動態轉發隧道,直接ssh -D {port} mine 即可

創建exp腳本,用於登陸服務器

#!/usr/bin/expect
set timeout 30
spawn ssh [lindex $argv 0]@[lindex $argv 1] -p [lindex $argv 3]
expect {
        "(yes/no)?"
        {send "yes\n";exp_continue}
        "password:"
        {send "[lindex $argv 2]\n"}
}
interact

windows nat

微軟Windows的netsh是一個命令行腳本實用工具。使用netsh工具 ,可以查看或更改本地計算機或遠程計算機的網絡配置。不僅可以在本地計算機上運行這些命令,而且可以在網絡上的遠程計算機上運行。
首先安裝IPV6(xp下IPV6必須安裝,否則端口轉發不可用!)(windows7之後已經默認安裝好了)

netsh interface ipv6 install
添加一個IPV4到IPV4的端口映射

netsh interface portproxy add v4tov4 listenaddress=192.168.193.1 listenport=22 connectaddress=xxx.xxx.xxx.xxx connectport=22
指定監聽ip和端口可以刪除

netsh interface portproxy delete v4tov4 listenaddress=192.168.193.1 listenport=22
可以查看存在的轉發

netsh interface portproxy show all

.ssh/config

Host machine_one
       Hostname 60.20.11.133
       User root
       Port 3434
Host machine_two
       Hostname 124.83.192.21
       User root
       Port 22
Host tunnel
       Hostname 127.0.0.1
       Port 5022
       ProxyCommand ssh -q -x -W %h:%p machine_two
       User root
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章