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