SSH連接在沒有輸入和執行任務空閒一段時間後,就會自動斷開連接,以節約系統資源和提高安全性。但在做端口映射的時候,就比較麻煩,剛開始連接上,可能服務端就退出了。可以做一些設置,讓其能夠保持長期連接。當然,如果網絡中斷了,連接也就斷了,需要想別的辦法能夠自動重新連接。
Ubuntu 系統
A、服務器配置
修改ssh配置文件/etc/ssh/sshd_config,添加或者修改ClientAliveInterval爲:
ClientAliveInterval 60
這個參數的是意思是每1分鐘,服務器向客戶端發一個消息,用於保持連接。
保存後記得重啓ssh服務,使用sudo service sshd restart。
B、客戶端配置
在ssh客戶端配置文件/etc/ssh/ssh_config中添加下面這行:
ServerAliveInterval 60
或者,在linux系統中使用ssh連接遠程服務器時,可以使用-o的一個參數ServerAliveInterval來設置防止超時的時間。
比如:ssh -o serveraliveinterval=60 username@host
自動化執行SSH
我們希望建立端口映射的操作能夠自動執行。比如:
- 動態端口映射:
- sshpass -p "password" ssh -D 7070 user@serverip
- 然後本機就可以使用端口localhsot:7070的socks5連接,就跟在serverip上操作一樣。
- 反向鏈接(從本地鋪一個橋到服務器,然後其它流量可以從橋上過來):
- sshpass -p "password" ssh -R 2222:localhost:22 root@serverip
- 然後其它機器登入root@serverip,就可以使用 ssh -p 2222 user@localhost:22的方式來訪問了。
上面的sshpass是用於命令行傳入密碼的(否則需要交互輸入),ubuntu下可以直接 apt-get install sshpass 進行安裝。
然後寫腳本autossh.sh,內容如下:
#!/bin/bash
while [ '' == '' ]
do
ssh_d_process_num=`ps aux|grep -E 'ssh \-' |grep -v grep |wc -l`
if [ "$ssh_d_process_num" == "0" ]; then
/home/user/sshpass -p "password" ssh -D 7070 user@ServerIP &
fi
sleep 300
done
執行一下這個腳本就可以了。sleep 300代表300秒查看一次,可以根據需要調整。