无论如何,我的目标是在后台维护一个ssh隧道.
为了做到这一点,我编写了以下批处理,然后我将其添加到crontab中(批处理在工作日期间每隔5分钟自动处理一次,从早上8点到晚上9点).
我在stackoverflow中的其他一些线程中读到,应该使用autossh,这将确保通过循环检查确保ssh始终正常.我也是….
#!/bin/bashLOGfile="/root/Tunnel/logBatchRestart.log"Now="$(date +%d/%m/%Y' - '%H:%M)" # date & time of logif ! ps ax | grep ssh | grep tunnelToto &> /dev/nullthen echo "[$Now] ssh tunnel not running : restarting it" >> $LOGfile autossh -f -N -L pppp:tunnelToto:nnnnn nom-prenom@193.xxx.yyy.zzz -p qqqq if ! ps ax | grep ssh | grep toto &> /dev/null then echo "[$Now] Failed starting tunnel" >> $LOGfile else echo "[$Now] restart successfull" >> $LOGfile fifi
我的问题是有时隧道停止工作,虽然每件事看起来都好(ps ax | grep ssh>结果显示了两个预期的任务:autossh主任务和ssh隧道本身).我实际上知道这个问题导致隧道被第三方软件使用,一旦隧道不再响应就会触发错误.
所以我想知道我应该如何改进我的批处理它将能够检查隧道并重新启动它,如果它真的死了.我在there中看到了一些想法,但它是由“autossh”提示结束的…我已经使用过了.因此,我没有想法……如果你们有任何人,我很乐意看看他们!
感谢您对我的问题和您(可能)的建议感兴趣!
解决方法 您可以执行以下 *** 作,而不是使用ps检查ssh进程创建脚本,执行以下 *** 作并通过crontab -e将其添加到crontab
#!/bin/shREMOTEUSER=usernameREMOTEHOST=remotehost SSH_REMOTEPORT=22SSH_LOCALPORT=10022TUNNEL_REMOTEPORT=8080TUNNEL_LOCALPORT=8080createTunnel() { /usr/bin/ssh -f -N -L$SSH_LOCALPORT:$REMOTEHOST:SSH_REMOTEPORT -L$TUNNEL_LOCALPORT:$REMOTEHOST:TUNNEL_REMOTEPORT $REMOTEUSER@$REMOTEHOST if [[ $? -eq 0 ]]; then echo Tunnel to $REMOTEHOST created successfully else echo An error occurred creating a tunnel to $REMOTEHOST RC was $? fi}## Run the 'ls' command remotely. If it returns non-zero,then create a new connection/usr/bin/ssh -p $SSH_LOCALPORT $REMOTEUSER@localhost ls >/dev/null 2>&1if [[ $? -ne 0 ]]; then echo Creating new tunnel connection createTunnelfi
实际上,这个脚本将打开两个端口
>端口22,用于检查隧道是否仍然存在
>端口8080,这是您可能想要使用的端口
请通过评论检查并向我发送更多问题
总结以上是内存溢出为你收集整理的linux – 如何设置后台ssh隧道的自动(重新)启动全部内容,希望文章能够帮你解决linux – 如何设置后台ssh隧道的自动(重新)启动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)