V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
dingzi
V2EX  ›  Linux

pl 脚本限制 ssh 同时在线

  •  
  •   dingzi · 2015-02-10 16:22:19 +08:00 · 2430 次点击
    这是一个创建于 3575 天前的主题,其中的信息可能已经有所发展或是发生改变。
    以下代码收集自网络 。 我目的为限制服务器里的各个ssh账号能最多能同时登陆3个。
    #!/usr/bin/perl -w
    use strict;
    #white list
    my @ALLOW_USERS = qw{
    test
    root
    };
    #the maximum number of ssh login(目前知道这里的数字需要改成3)
    my $LOGIN_TIMES = 1;

    sub main
    {
    my @lines = `ps -eo user,pid,etime,cmd | grep sshd`;
    my $users;
    for my $line (@lines) {
    if(my ($user, $pid, $etime, $cmd) = $line =~ /^([^\s]+)\s+(\d+)\s+([^\s]+)\s+(sshd:.+)$/) {
    next if grep {$user eq $_} @ALLOW_USERS;
    my $proc = {'pid', $pid, 'etime', $etime, 'cmd', $cmd};
    push @{$users->{$user}}, $proc;
    }
    }
    for my $key(keys(%$users)) {
    my @sshs = sort {
    my ($lb, $la) = (length($b->{'etime'}), length($a->{'etime'}));
    if($lb == $la) {
    $b->{'etime'} cmp $a->{'etime'};
    } else {
    $lb <=> $la;
    }
    } @{$users->{$key}};
    $LOGIN_TIMES = 1 if $LOGIN_TIMES < 1;
    for (1 .. $LOGIN_TIMES) { pop @sshs; };
    for my $ssh (@sshs) {
    kill 9, $ssh->{'pid'};
    }
    }
    }
    while(1) {
    main;
    sleep 3;
    }
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   868 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:53 · PVG 05:53 · LAX 13:53 · JFK 16:53
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.