当前位置:  操作系统/服务器>linux
本页文章导读:
    ▪实现ssh关闭后当前进程继续运行的方法      在linux系统中,默认情况下,当关闭ssh终端连接,随之启动的程序也会关闭。 原理分析: SSH会话关闭时,ssh所关联的pty关闭,系统会给这个pty所关联的session中的所有进程发送SIGHUP信号,SIGHUP.........
    ▪sshd配置用户与ip限制访问的例子      在linux系统中,sshd服务 不受 xinetd 管理,但可支持 tcpd,所以可以 hosts.allow 中配置:   代码示例: sshd: 192.168.0. sshd: ALL: deny 以上配置,只允许 192.168.0. 网段的主机连接本机的ssh。 方法2,使.........
    ▪清除 Linux 登陆信息及日志的方法      在linux系统中,如何清除访问日志、登陆日志及曾使用过的命令呢? 本文介绍的方法,将删除所有日志,即包括系统日志在内的所有日志将被抹去,用户将无法了解过去某个时段系统曾发生.........

[1]实现ssh关闭后当前进程继续运行的方法
    来源: 互联网  发布时间: 2013-12-24

在linux系统中,默认情况下,当关闭ssh终端连接,随之启动的程序也会关闭。

原理分析:
SSH会话关闭时,ssh所关联的pty关闭,系统会给这个pty所关联的session中的所有进程发送SIGHUP信号,SIGHUP的默认信号处理程序是终止进程,除非进程自己处理了
SIGHUP。

那么,有没有办法,实现关闭ssh后,当前执行的进程仍继续运行呢?比如我们用wget命令批量下载上千个远程服务器上的文件时。

解决方法:
使用现成的命令nohup,可以让指定的程序在pty关闭之后继续运行。

运行方法:
 

代码示例:
#nohup program &
 

现在正常关闭ssh后,服务依然继续运行。

当SecureCRT异常关闭后,后台进程一同关闭的现象罪魁祸首 Signup信号。

症状:使用SecureCRT工具ssh远程连接linux,不退出ssh,而是强行关闭终端(合上笔记本走人)情况下,后台启动的应用也会关闭。

测试案例:
很明显的是关闭终端后,前台运行的程序会被随之关闭,但是后台进程也会因为终端异常关闭而关掉。

一个简单的测试结果:
1、后台执行程序,正常关闭ssh连接,关闭终端的情况:
开启两个终端,其中第一个在后台执行ping操作
 

代码示例:
ping google.com | tee log.txt &

在第二个终端观察
tail -f log.txt 可以看到日志一直在写
使用pstree命令可以看到ping的进程存在
 

代码示例:
|-sshd-+-sshd---sshd---bash---pstree
| `-sshd---sshd---bash-+-ping
| `-tee

Ctrl+D 退出第一个终端 然后关闭终端

第二个终端的日志仍然在写,pstree命令:
 

代码示例:
|-ping
ps x
29427 ? S 0:00 ping google.com
 

看到ping的进程依然存在

2、后台执行程序,非正常关闭ssh连接(模拟突然掉电或者,未来得及退出ssh,或者ssh仍然连接,直接关闭终端SecureCRT)情况:
同样开启两个终端,其中第一个在后台执行ping操作
 

代码示例:
ping google.com | tee log.txt &

在第二个终端观察
tail -f log.txt 可以看到日志一直在写
使用pstree命令可以看到ping的进程存在
 

代码示例:
|-sshd-+-sshd---sshd---bash---pstree
| `-sshd---sshd---bash-+-ping
| `-tee

在不退出ssh的情况下,强行关闭第一个终端(SecureCRT)
在第二个终端观察
tail -f log.txt 可以看到日志已经停止写。
使用pstree命令可以看到ping的进程被停掉
ps aux看不到ping的进程,说明强行关闭终端的情况下后台进程也别kill掉了


查了一下资料,这其中起关键的是 SIGHUP信号
查看所有的信号:
 

代码示例:
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1
36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5
40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5
60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1
64) SIGRTMAX

列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的
区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

SIGHUP信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
登录Linux时,系统会分配给登录用户一个终端(Session)。在这个终端运行的所有程序,包括前台进程组和后台进程组,一般都属于这个 Session。
当用户退出Linux登录时,前台进程组和后台有对终端输出的进程将会收到SIGHUP信号。这个信号的默认操作为终止进程,因此前台进程组和后台有终端输出的进程就会中止

不过有的程序可以捕获这个信号,并忽略它,这样就算退出了Linux登录,后台程序依旧运行。
此外,对于与终端脱离关系的守护进程,这个信号用于通知它重新读取配置文件。

附,secureCRT异常退出和执行exit的区别?
如果直接关闭secureCRT(此处假设是使用ssh登录终端的),那么对于被登录的系统来说,就是远端程序异常断连。和我们突然断网掉线是一样的效果。
这种情况下,用户并没有信号发送,而是sshd服务检测到对端响应超时,然后向之前建立起的连接以及该连接下(ssh登录后会分配一个bash给用户)的进程发送结束信号。
如果部分进程忽略sshd发送的信号,进程不退出,在分配给用户的bash退出后,该进程将被init进程接管。

对于终端异常退出后,后台进程不关闭问题,有如下的解决办法:
1、使用nohup命令: nohup <command> [argument…] & nohup可以屏蔽SIGHUP信号!
2、使用 screen命令。

简单介绍如下:
 

代码示例:
SCREEN vi /tmp/2hei.net

需要中断连接:
 

代码示例:
screen Ctrl+a d

查询screen进程:
 

代码示例:
ps x
20377 ? Ss 0:00 SCREEN vi /tmp/2hei.net

重连

代码示例:
screen -r 20377

    
[2]sshd配置用户与ip限制访问的例子
    来源: 互联网  发布时间: 2013-12-24

在linux系统中,sshd服务 不受 xinetd 管理,但可支持 tcpd,所以可以 hosts.allow 中配置:
 

代码示例:
sshd: 192.168.0.
sshd: ALL: deny

以上配置,只允许 192.168.0. 网段的主机连接本机的ssh。

方法2,使用iptables,linux中的防火墙策略:
 

代码示例:
iptables -I INPUT -p tcp --dport 22 -j DROP
iptables -I INPUT -p tcp --dport 22 -s 192.168.0.0/32 -j ACCEPT

(注意:用 -I 命令,且順序不能颠倒!)

补充:
如果想限制哪些用戶可用,请 man sshd_config 找找 AllowGroups 与 AllowUsers 进行设定。
当然,使用 pam 也可以:
1,修改 /etc/pam.d/sshd
 

代码示例:
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail

2,将需要的用戶添加到 /etc/sshusers 文件中,例如:
 

代码示例:
echo "root" >> /etc/sshusers

本文介绍了,禁止某些用户或IP访问ssh的二种方法,以及只允许特定用户访问的方法,希望对大家有所帮助。


    
[3]清除 Linux 登陆信息及日志的方法
    来源: 互联网  发布时间: 2013-12-24

在linux系统中,如何清除访问日志、登陆日志及曾使用过的命令呢?
本文介绍的方法,将删除所有日志,即包括系统日志在内的所有日志将被抹去,用户将无法了解过去某个时段系统曾发生过什么事情。

用以下的shell脚本来实现:
 

代码示例:
#!/usr/bin/bash
#edit www.
echo > /var/log/syslog
echo > /var/log/messages
echo > /var/log/httpd/access_log
echo > /var/log/httpd/error_log
echo > /var/log/xferlog
echo > /var/log/secure
echo > /var/log/auth.log
echo > /var/log/user.log
echo > /var/log/wtmp
echo > /var/log/lastlog
echo > /var/log/btmp
echo > /var/run/utmp
history -c

代码说明:
用echo命令,清空相关的日志文件,然后对于历史命令记录,则使用history -c来清空。


    
最新技术文章:
▪linux系统中的列出敏感用户的脚本代码
▪a10 config backup for aXAPI
▪一键备份gitolite服务器的Shell脚本
▪nagios 分发文件实现代码
▪阿里云云服务器Linux系统更新yum源Shell脚本
▪一个监控LINUX目录和文件变化的Shell脚本分享
▪Linux下实现SSH免密码登录和实现秘钥的管理、...
▪Shell正则表达式之grep、sed、awk实操笔记
▪3个备份系统文件并邮件发送的Shell脚本分享
▪CentOS 6.3下给PHP添加mssql扩展模块教程
▪监控网站是否可以正常打开的Shell脚本分享
▪shell脚本编程之if语句学习笔记
▪shell脚本编程之循环语句学习笔记
▪shell脚本编程之case语句学习笔记
▪Shell脚本实现的阳历转农历代码分享
c/c++开源软件 iis7站长之家
▪Shell脚本实现批量下载网络图片代码分享
▪Shell脚本实现检测文件是否被修改过代码分享
▪Shell脚本数组用法小结
▪Shell脚本批量重命名文件后缀的3种实现
▪C语言实现的ls命令源码分享
▪Linux下查找后门程序 CentOS 查后门程序的shell脚...
▪Shell 函数参数
▪linux shell 自定义函数方法(定义、返回值、变...
▪Shell实现判断进程是否存在并重新启动脚本分...
▪Shell脚本break和continue命令简明教程
▪Shell脚本函数定义和函数参数
▪让代码整洁、过程清晰的BASH Shell编程技巧
▪shell常用重定向实例讲解
▪awk中RS、ORS、FS、OFS的区别和联系小结
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3