问题描述:
使用【Xshell】软件的时候,我们通常会把程序挂在【Xshell】主页上,这样可以随时随地的看到深度学习代码训练的进程。但是,把自己的程序挂上一天,或者一段时间不操作【Xshell】,就会出现这个问题。然后,你再次连接还可以连接,就是你的程序得重新跑了。
然而,当你,再次连接后,可能过上三五分钟,又出现这个提示并且断开了,是不是很烦?
下面的方法,可能帮助你!一起看看吧
原因分析:
使用【Xshell】软件,用ssh连接是,如果你连接过于频繁或者连接之后长时间不操作,都会出现这个报错
问题解决:
三种解决方案,三种不同的思想。我们一起尝试!
①修改配置文件
在Linux服务器终端上输入如下命令
1.使用管理员权限进入修改配置文件
sudo vim /etc/ssh/sshd_config
这里可能会让你输入密码。输入你的管理员密码即可。
2.修改某些参数。
#ClientAlivenInterval 修改成【60】
#ClientAlivenCountMax修改成【3】
具体操作如下:
使用管理员权限进入修改配置文件进入页面之后,按【i】进入编辑状态。进入成功后左下角的标志为下:
然后找到这两个位置,修改成上面要求的参数:
参数解释:
【设置SSH空闲超时退出时间,可降低未授权用户访问其他用户ssh会话的风险】
ClientAliveInterval 60 :每隔60秒发送一次请求给client,然后client响应,从而保持连接。
ClientAliveCountMax 3 :发出请求后,客户端没有响应的次数达到3次,就自动断开连接,正常情况下,不会不响应。
然后,按键盘左上角的【Esc】退出编辑,成功退出后,左下角会出现这个页面。
再依次按英文的【:】【w】[【q】【!】,效果如下。最后按个回车保存就可以了。
按完回车之后,出现这个页面:
就代表,编辑成功了!
3.重启sshd服务
systemctl restart sshd
②不修改配置文件,直接在SSH远程连接的时候添加参数
不修改配置文件,直接在SSH远程连接时命令加参数,即ssh -o ServerAliveinterval=60 root@'远程连接IP地址'
,这样就只会在当前需要的远程连接中保持持久的连接, 并不是所有的远程连接都需要保持持久连接的!
[root@Jenkins ~]# ssh -o ServerAliveinterval=60 [email protected]
Last login: Wed May 18 14:53:19 2022 from 192.168.1.30[root@Web1 ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.33 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 240e:39a:39b:cd10:20c:29ff:fec1:8e32 prefixlen 64 scopeid 0x0<global>
inet6 fe80::20c:29ff:fec1:8e32 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c1:8e:32 txqueuelen 1000 (Ethernet)
RX packets 756 bytes 66547 (64.9 KiB)
RX errors 0 dropped 112 overruns 0 frame 0
TX packets 549 bytes 52204 (50.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
③使用nohup后台运行深度程序
nohup的意思就是:永久执行,是no hang up的缩写,指不间断,不挂断。运行一个进程的时候,不想让其在你退出账号时关闭,即可用nohup。nohup用于不挂断地运行命令。nohup在不规定的情况下,所以输出内容会到nohup.out中。
nohup运行命令可以使命令永久的执行下去,和用户终端没有关系,例如我们断开SSH连接都不会影响运行,注意了nohup没有后台运行的意思;&是指在后台运行,但当用户推出(挂起)的时候,命令自动也跟着退出。
在跑时间比较长的程序,或者打印信息比较多,或者网络不稳定时,可以采用后台运行程序,然后把打印信息保存在文件中,等程序结束后再检查日志,
一般在终端运行自己的代码指令时候,加上【nohup】,具体格式用这个就够了
nohup python A.py >> /home/my.log 2>&1 &
其中,A.py是自己要运行的命令; /home/my.log是自己要存储代码运行的日志文件,即你在前台看到什么都会给你写进去这个log文件。
其中,
1. 最后一个“&”表示后台运行程序
2. “nohup” 表示程序不被挂起
3. “python”表示执行python代码
4. “-u”表示不启用缓存,实时输出打印信息到日志文件(如果不加-u,则会导致日志文件不会实时刷新代码中的print函数的信息)
5. “test.py”表示python的源代码文件
6. “test.log”表示输出的日志文件
7. “>”表示将打印信息重定向到日志文件
8. “2>&1”表示将标准错误输出转变化标准输出,可以将错误信息也输出到日志文件中(0-> stdin, 1->stdout, 2->stderr)
输入好之后,按回车,输入exit命令退出终端,关闭shell。【注意】不能直接退出终端
查看后台运行程序及关闭
有两个命令可以用,jobs和ps,区别是jobs用于查看当前终端后台运行的任务,换了终端就看不到了。而ps命令用于查看瞬间进程的动态,可以看到别的终端运行的后台进程。
jobs命令只看当前终端生效的,关闭终端后,在另一个终端jobs已经无法看到后台跑得程序了。也就是说如果你的网或者你关闭链接时,当你再次进入时用jobs -l看不到之前运行的程序运行进程。
其他问题整理:
1.解决SSH登陆缓慢问题
(1)编辑/etc/ssh/sshd_config
配置文件,将UseDNS修改为no,最好是在尾部添加一行为:UseDNS no
(2)关闭GSSAPI认证:GSSAPIAuthentication no
,修改完成后记得重启ssh服务。
[root@Jenkins ~]# vim /etc/ssh/sshd_config
...
79 GSSAPIAuthentication yes
...
115 #UseDNS yes
...
2.解决SSH无法登陆问题
一般情况下当ssh服务远程连接不上时,后台登陆服务器,先确认服务器网络有无问题,查一下ssh服务有没有正常运行,防火墙是否放行了ssh端口,检查sshd_config文件配置(注意端口号、是否有地址绑定、是否允许root登陆等);
如果都没问题,再检查下/etc/hosts.deny 和 /etc/hosts.allow两个配置文件是否有限制登陆。
/etc/hosts.allow和/etc/hosts.deny两个配置文件:
有时候服务器上会用这两个文件限制登陆的IP,通常是在/etc/hosts.deny文件中里面先deny all,然后在/etc/hosts.allow文件中添加需要登陆的IP地址;例如:
先禁止所有:
[root@Jenkins ~]# cat /etc/hosts.deny
sshd: ALL : deny
再放行允许连接访问的IP地址:
[root@Jenkins ~]# cat /etc/hosts.allow
sshd:10.10.10.* : allow 允许10.10.10.0/24网段登陆
sshd: 192.168.1.30 : allow 允许192.168.1.30这个ip登陆
到这,就已经解决了问题。欢迎关注蓝胖胖,咱们一起变强大!!!~~~
参考文章:
https://blog.csdn.net/qq_44895681/article/details/124841145
https://blog.csdn.net/qq_41895003/article/details/105261596
https://blog.csdn.net/xiaoliyi185/article/details/90704812