我正在使用反向ssh連接到遠程客戶端,運營商反向運行一次並離開客戶端系統 如何在反向ssh與服務器重試斷開連接時編寫bash腳本連接到服務器(ssh)如何知道ssh是否被拒絕並使用bash腳本重試
回答
使用autossh。 Autossh「自動重新啓動[S] SSH會話和隧道」
sudo apt-get install autossh
我用autossh來保持我依賴的開放反向隧道。即使長時間連接失敗,它也能很好地工作。
這裏是我用來創建隧道的腳本:
#!/bin/bash
AUTOSSH_GATETIME=0
export AUTOSSH_GATETIME
autossh -f -N -R 8022:localhost:22 [email protected] -o "ServerAliveInterval 45" -o "ServerAliveCountMax 2"
我在啓動這個的cronjob執行這個腳本:
@reboot /home/scripts/./persistent-tunnel.sh
顯然,如果使用'-f','AUTOSSH_GATETIME'設置爲0,所以我不認爲你需要它。 – Timmmm
您可以使用netstat -ntp | grep ":22"
或ss -ntp | grep ":22"
查看建立的與ssh端口的連接,然後使用grep過濾您要查找的IP地址。如果您沒有找到連接,請重新連接隧道。
如果你只是想重試命令,直到成功,您可以使用此模式:
while ! ssh [...]
do
echo "Command failed, retrying..." >&2
done
你可能想看看到SSH選項ServerAliveInterval ,ServerAliveCountMax和TCPKeepAlive,因爲有時候你的線路沒有這麼明顯就死掉了,讓我來演示一下:
#!/bin/sh
while true; do
ssh -T [email protected] \
-o IdentityFile=~/.ssh/tunnel \
-o UserKnownHostsFile=~/.ssh/known_hosts.tunnel \
pkill -f "^sshd:\ user\ \ \ \ $" # needs to be edited for nearly every case
sleep 2
ssh -T -N [email protected] \
-o IdentityFile=~/.ssh/tunnel \
-o UserKnownHostsFile=~/.ssh/known_hosts.tunnel \
-o Batchmode=yes \
-o ExitOnForwardFailure=yes \
-o ServerAliveCountMax=1 \
-o ServerAliveInterval=60 \
-o LocalForward=127.0.0.1:2501=127.0.0.1:25 \
-o RemoteForward=127.0.0.1:2501=127.0.0.1:25
sleep 60
done
我有一個稍微不同的方法。 我的方法總是試圖重新連接你,如果你有一個髒斷開:'〜'。或'通過遠程主機關閉連接'。 但是,如果您使用'CRTL + D'或'退出'斷開連接,它會斷開連接並顯示一些連接信息。
我有一個稍微不同的方法。 我的方法總是試圖重新連接你,如果你有一個髒斷開:'〜'。或'通過遠程主機關閉連接'。 但是,如果您使用'CRTL + D'或'退出'斷開連接,它會斷開連接並顯示一些連接信息。
#/bin/bash
if [ -z "$1" ]
then
echo '''
Please also provide ssh connection details.
'''
exit 1
fi
retries=0
repeat=true
today=$(date)
while "$repeat"
do
((retries+=1)) &&
echo "Try number $retries..." &&
today=$(date) &&
ssh "[email protected]" &&
repeat=false
sleep 5
done
echo """
Disconnected sshx after a successful login.
Total number of tries = $retries
Connected at:
$today
"""
- 1. 如何從bash腳本知道用戶是否突然關閉ssh會話
- 2. 如何知道來電是被拒絕還是被錯過
- 3. ruby:如何知道腳本是否在第三次重試?
- 4. 如何知道paramiko SSH通道是否被斷開?
- 5. 如何知道FastCGI是否被用來運行PHP腳本
- 6. 如何知道bash腳本是否正在運行nohup?
- 7. SSH權限在重啓時被拒絕
- 8. ansible ssh權限被拒絕
- 9. ssh wget連接被拒絕
- 10. aws ssh連接被拒絕
- 11. openshift ssh訪問被拒絕
- 12. SSH權限被拒絕
- 13. SSH權限被拒絕
- 14. Java調用bash腳本:權限被拒絕錯誤
- 15. 我的應用程序被拒絕,並想知道爲什麼?
- 16. 嘗試使用腳本時權限被拒絕錯誤。字典
- 17. 運行shell腳本做git推w/ssh鍵,權限被拒絕
- 18. 如何知道jenkins是否啓用或不使用shell腳本
- 19. bash:./manage.py:權限被拒絕
- 20. -bash:./manage.py:權限被拒絕
- 21. -bash:./setantenv.sh:權限被拒絕
- 22. 如何知道InnoSetup腳本是否需要重新啓動?
- 23. 在Windows上bash上的shell腳本被拒絕
- 24. Errno 13權限被拒絕bash腳本和apache2
- 25. 當我嘗試從bash執行python腳本時,權限被拒絕?
- 26. 如何使用net/ssh gem來知道包是否已安裝?
- 27. 如何知道Bash腳本中的腳本文件名?
- 28. 用SSH啓動bash腳本
- 29. 使用ssh調用bash腳本
- 30. 訪問被拒絕的Python腳本Pstuil
您的意思是「反向SSH隧道」? – kiran
有時SSH會話可能會顯示爲「掛起」,進程無法消失。這聽起來像你想要一種「看門狗」,它將測試一個*函數*隧道,而不是檢查以確保該過程仍然存在。有很多方法可以做到這一點,你可以研究。如果您在實施某項功能時遇到問題,請提出顯示您嘗試的代碼的問題,以及您的預期結果和實際結果。 – ghoti