二、要启动telnet 服务就必须重新启动xinetd [root@localhost root]#service xinetd restart
三、关闭防火墙,等。。
四、要域名访问的话,要开启路由器的 23 端口映射
五、关闭的话就是 设置成 disable=yes ,然后重启xinetd service xinetd restart 1。基础知识 linux提供服务是由运行在后台的守护程序(daemon)来执行的。 守护进程的工作就是打开1个端口(port),等待(listen)进入的连接。在C/S模式中,如果客户提请了1个连接,守护进程就创建(fork)子进程来响应这个连接,而父进程继续监听其他服务的请求。 但是,对于系统所提供的每1个服务,如果都必须运行1个监听某个端口连接发生的守护程序,那么通常意味着系统资源的浪费。为此,引入“扩展的网络守护进程服务程序”xinetd(xinetd internet daemon)。telnet服务也是由xinetd守护的。 2。检测telnet、telnet-server的rpm包是否安装 OS:RedHat9 [root@localhost root]#rpm -qa telnet telnet-0.17-25 //telnet*.rpm是默认安装的// [root@localhost root]#rpm -qa telnet-server 空 //telnet*.rpm是默认没有安装的// 3。安装telnet-server 第3张盘上有telnet-server-0.17-25.i386.rpm [root@localhost root]#rpm -ivh telnet-server*.i386.rpm 4。修改telnet服务配置文件 vi /etc/xinetd.d/telnet service telnet { disable = yes flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd log_on_failure += USERID } 将disable=yes行前加#,或者改为disable=no PS: 安装telnet-server后,系统才有文件/usr/sbin/in.telnetd 5。重新启动xinetd守护进程 由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd [root@localhost root]#service xinetd restart 或 [root@localhost root]#/etc/init.d/xinetd restart 6。关闭系统的防火墙 linux系统默认的防火墙是“high” 命令行界面CLI: [root@localhost root]# setup 选择:“firewall configuration” 选择:security level——“no firewall” 7。测试 telnet IP QUOTE: Red Hat Linux release 9 (Shrike) Kernel 2.4.20-8 on an i686 login: 出现,就OK了! 8。telnet默认开机启动 1)。命令ntsysv 找到telnet,用空格键激活(*)服务 2)。命令chkconfig chkconfig --add telnet chkconfig telnet on 3)。图形用户界面GUI redhat-conhat-config-services 或 “主菜单”——“系统设置”——“服务器设置”——“服务” 4)默认下,telnet不允许root登录.通过编辑/etc/pam.d/login文件,放开root用户登录权限控制 # vi /etc/pam.d/login 在auth required /lib/security/pam_securetty.so行前加“#”号注释,注销该行。 PS: 由于telnet登陆时是明文传送密码,所以不安全,建议使用ssh(secure shell)替代! windows下一般用F-Secure SSH ,putty SSH ------------------------------------------- 四、设置telnet端口 #vi /etc/services 进入编辑模式后查找telnet(???怎样查找) 会找到如下内容: telnet 23/tcp telnet 23/udp 将23修改成未使用的端口号(如:2000),退出vi,重启telnet服务,telnet默认端口号就被修改了。 五、Telnet服务限制 如果原本的默认值你并不满意,那么你可以修改成比较安全一点的机制。假设你这个 Linux 是一部主机,而且他有两块网络接口,分别是对外的 192.168.0.1 与对内的210.45.160.17 这两个,如果你想要让对内的接口限制较松,而对外的限制较严格,你可以这样的来设定: #vi /etc/xinetd.d/telnet # 先针对对内的较为松散的限制来设定: service telnet { disable = no <==预设就是激活 telnet 服务 bind = 210.45.160.17 <==只允许经由这个适配卡的封包进来 only_from = 210.45.160.0/24 <==只允许 210.45.160.0/24 这个网段的主机联机进来使用 telnet 的服务 ..... } # 再针对外部的联机来进行限制 service telnet { disable = no<==预设就是激活 telnet 服务 bind = 192.168.0.1<==只允许经由这个适配卡的封包进来 only_from = 192.168.0.0/16<==只允许 192.168.0.0 ~ 192.168.255.255 这个网段联机进来使用 telnet 的服务 only_from = .edu.cn<==重复设定,只有教育网才能联机! no_access = 192.168.25.{10,26}<==不许这些 PC 登入 access_times = 1:00-9:00 20:00-23:59 <==每天只有这两个时段开放服务 ...... }
六、Telnet root用户的登入 root 不能直接以 telnet 连接上主机。 telnet 不是很安全,默认的情况之下就是无法允许 root 以 telnet 登入 Linux 主机的 。若要允许root用户登入,可用下列方法 [root @test /root]# vi /etc/pam.d/login #auth required pam_securetty.so #将这一行加上注释! 或 # mv /etc/securetty /etc/securetty.bak 这样一来, root 将可以直接进入 Linux 主机。不过,建议不要这样做。还可以在普通用户进入后,切换到root用户,拥有root的权限! 安全的ssh SSH是一个用来替代TELNET、Rlogin以及Rsh的传统的远程登陆程序的工具,主要是想解决口令在网上明文传输的问题。为了系统安全和用户自身的权益,推广SSH是必要的。SSH有两个不兼容的版本1.x,2.x!RedHat Linux 9将默认的远程管理服务设置成OpenSSH(一个ssh的替代产品)。不需要重新安装软件包! 一、配置openssh服务器 1、ssh的配置文件是/etc/ssh/ssh_config,一般不要修改! 2、启动服务器! #ntsysv =>确认将sshd前面的勾已打上! 3、手工启动OpenSSH: #service sshd start #service sshd restart(重新启动) 4、停止服务器: #service sshd stop 二、使用OpenSSH客户端 Redhat linux 9默认已安装了OpenSSH的客户端,客户端和服务器连接时,可以使用两种验证方式:基于口令的验证方式和
背景 :工作需要,需要远程控制主机使其断开Xshell后也能一直运行。
关键字 :& ,nohup,脚本挂起。
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 &在程序结尾来让程序自动运行。
键入Ctrl + C,发出SIGINT信号,程序会继续运行
方法一、输入命令:jobs
方法二:输入命令:ps
fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令
加在一个命令的最后,可以把这个命令放到后台执行,如
可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
查看当前有多少在后台运行的命令
jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated。但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识。
将后台中的命令调至前台继续运行。如果后台中有多个命令,可以用fg %jobnumber(是命令编号,不是进程号)将选中的命令调出。
将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出。
法子1:通过jobs命令查看job号(假设为num),然后执行kill %num
法子2:通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:Ctrl+c
如果让程序始终在后台执行,即使关闭当前的终端也执行(之前的&做不到),这时候需要nohup。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。
关闭中断后,在另一个终端jobs已经无法看到后台跑得程序了,此时利用ps(进程查看命令)
如上所示:
nohup 和 & 组合了后台运行程序。
可以输出到 out.log保存程序输出,也可以输出到/dev/null 即空设备,不保存输出。
上面三种方式无论在nohup.out 或test.out都看不到数据结果,这是因为python执行有缓存输出
解决
新的接口接入查看程序
使用&后台运行程序:
结果会输出到终端
使用Ctrl + C发送SIGINT信号, 程序免疫
关闭session发送SIGHUP信号, 程序关闭
使用nohup运行程序:
结果默认会输出到nohup.out
使用Ctrl + C发送SIGINT信号, 程序关闭
关闭session发送SIGHUP信号, 程序免疫
平日线上经常使用nohup和&配合来启动程序:
同时免疫SIGINT和SIGHUP信号
同时,还有一个最佳实践:
不要将信息输出到终端标准输出,标准错误输出,而要用日志组件将信息记录到日志里
nohup和&究竟有啥区别
你得查看后台存在的进程 #jobs
#fg
#bg
两个命令是调入前台和后台的命令
在命令后面加上一个 &
比如:
rm -rf /tmp/ &
Linux 技巧:让进程在后台可靠运行的几种方法
WeiboGoogle+用电子邮件发送本页面
我们经常会碰到这样的问题,用 telnet/ssh 登录了远程的 Linux 服务器,运行了一些耗时较长的任务, 结果却由于网络的不稳定导致任务中途失败。如何让命令提交后不受本地关闭终端窗口/网络断开连接的干扰呢?下面举了一些例子, 您可以针对不同的场景选择不同的方式来处理这个问题。
nohup/setsid/&
场景:
如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?
hangup 名称的来由
在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。
解决方法:
我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。
1. nohup
nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。让我们先来看一下 nohup 的帮助信息:
NOHUP(1) User Commands NOHUP(1) NAME nohup - run a command immune to hangups, with output to a non-tty SYNOPSIS nohup COMMAND [ARG]... nohup OPTION DESCRIPTION Run COMMAND, ignoring hangup signals. --help display this help and exit --version output version information and exit可见,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">filename 2>&1"来更改缺省的重定向文件名。
[root@pvcent107 ~]# nohup ping www.ibm.com &[1] 3059nohup: appending output to `nohup.out'[root@pvcent107 ~]# ps -ef |grep 3059root 3059 984 0 21:06 pts/3 00:00:00 ping www.ibm.comroot 3067 984 0 21:06 pts/3 00:00:00 grep 3059[root@pvcent107 ~]#2。setsid
nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。让我们先来看一下 setsid 的帮助信息:
SETSID(8) Linux Programmer’s Manual SETSID(8) NAME setsid - run a program in a new session SYNOPSIS setsid program [ arg ... ] DESCRIPTION setsid runs a program in a new session.可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。
[root@pvcent107 ~]# setsid ping www.ibm.com[root@pvcent107 ~]# ps -ef |grep www.ibm.comroot 31094 1 0 07:28 ? 00:00:00 ping www.ibm.comroot 31102 29217 0 07:29 pts/4 00:00:00 grep www.ibm.com[root@pvcent107 ~]#值得注意的是,上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。请将此例与nohup 例中的父 ID 做比较。
3。&
这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。
当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。
[root@pvcent107 ~]# (ping www.ibm.com &)[root@pvcent107 ~]# ps -ef |grep www.ibm.comroot 16270 1 0 14:13 pts/4 00:00:00 ping www.ibm.comroot 16278 15362 0 14:13 pts/4 00:00:00 grep www.ibm.com[root@pvcent107 ~]#从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)