免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2955 | 回复: 5
打印 上一主题 下一主题

[系统管理] SSH 循环登陆 [复制链接]

论坛徽章:
2
摩羯座
日期:2015-01-10 16:35:05摩羯座
日期:2015-01-25 22:10:41
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-21 14:45 |只看该作者 |倒序浏览
  我现在有这样一个需求,希望能通过shell脚本来解决,大家帮忙看看能不能实现。
1、用户可以指定一个网段,脚本会自动扫描该网段的主机是否存活并并启了22端口。
2、若开启了22端口,则使用 yunwei123/buyaoroot 登陆,若登陆成功则将此IP记录到/tmp下的IP.TXT中,
     若不成功则扫描下一个IP地址。

大家有啥好办法吗?  谢谢

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2014-11-21 15:23 |只看该作者
本帖最后由 jason680 于 2014-11-21 15:26 编辑

回复 1# lkf1100

1. loop with all IP

2. sshpass and ssh
  #sshpass -p'PASSWORD' ssh "USER@$IP" "echo 123 > /dev/null"
  sshpass -p'buyaoroot' ssh "yunwei123@$IP" "echo 123 > /dev/null"

3. check result
  if [ $? == 0 ];then
     echo "$IP ssh login ok"
     echo $IP >> /tmp/IP.TXT
  else
     echo "$IP ssh login failed"
  fi
   

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
3 [报告]
发表于 2014-11-21 16:56 |只看该作者
练习的好机会,能符合你的要求,不过执行起来太慢了要一个个IP去ping,有时间改个多线程会好些
  1. #!/usr/bin/python
  2. # -*- coding:utf-8 -*-
  3. import os
  4. import subprocess
  5. import re
  6. import socket
  7. import paramiko

  8. user = 'root'
  9. passwd = '123456'

  10. def ip(file,field):
  11.         ip_field = field
  12.         ip_file = open(file,'w')
  13.         for i in range(1,256):
  14.                 ip = '%s%s\n' % (ip_field,i)
  15.                 ip_file.write(ip)
  16.         ip_file.close()

  17. def test_ip(file):
  18.         file = open(file,'r')
  19.         ip_list = []
  20.         port = 22
  21.         f = open('login_ip.txt','w')
  22.         for line in file.readlines():
  23.                 line=line.strip('\n')
  24.                 ip_list.append(line)
  25.         for ip in ip_list:
  26.                 p = subprocess.Popen(["ping -c 1 "+ ip],
  27.                             stdin = subprocess.PIPE,
  28.                             stdout = subprocess.PIPE,
  29.                             stderr = subprocess.PIPE,
  30.                             shell = True)
  31.                 out = p.stdout.read()
  32.                 regex = re.compile("time=\d*", re.IGNORECASE | re.MULTILINE)
  33.                 if len(regex.findall(out)) > 0:
  34.                         print ip + ': Host Up!'
  35.                         s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  36.                         try:
  37.                                 s.connect((ip,int(port)))
  38.                                 s.shutdown(2)
  39.                                 print '%d is open' % port
  40.                                 try:
  41.                                         ssh = paramiko.SSHClient()
  42.                                         ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  43.                                         ssh.connect(ip,22,user, passwd)
  44.                                         #stdin, stdout, stderr = ssh.exec_command("你的命令")
  45.                                         #print stdout.readlines()
  46.                                         ssh.close()
  47.                                         print 'Login successful'
  48.                         #               f = open('login_ip.txt','w')
  49.                                         ip = '%s\n' % ip
  50.                                         f.write(ip)
  51.                 #               return True
  52.                                 except:
  53.                                         print 'The login problem, please check your username and password'
  54.                         except:
  55.                                 print '%d is down' % port
  56.                 #               return False
  57.                 else:
  58.                         print ip + ': Host Down!'
  59.         file.close()
  60.         f.close()
  61. ip('test','192.168.209.')
  62. test_ip('test')
复制代码

论坛徽章:
2
摩羯座
日期:2015-01-10 16:35:05摩羯座
日期:2015-01-25 22:10:41
4 [报告]
发表于 2014-11-25 14:19 |只看该作者
本帖最后由 lkf1100 于 2014-11-25 14:29 编辑

期望的功能很简单  

1、扫描一个指定的网段, 比如 192.168.1.x/24位的网段,看那些主机开启了22号端口。这个用 while 或者其他循环都可以。 输出的结果应该是IP地址。
2、使用ssh指定的用户名和密码(yunwei123/buyaoroot)登陆到目标主机 。
3、所有的主机登陆成功后均执行一条命令,
  1. OILINFOR=`ls /match/txt/bak/*.infor | head -1`
  2. OILCANNO=`basename $OILINFOR | cut -c 1-8`
复制代码
  将取得到的值记录到本机/tmp目录下的 result.txt 文件中,文件格式为 “ IP地址  oilcanno的值 ”,
3、执行完成后正常结束。
谢谢您的回复,最好用bsh  ,python 不懂     
回复 2# jason680



   

论坛徽章:
0
5 [报告]
发表于 2014-11-25 15:39 |只看该作者
  1. #!/bin/bash

  2. ipsub=`echo $1 | awk -F. '{print $1"."$2"."$3"."}'`
  3. i=1
  4. while [ $i -lt 255 ];do

  5.         ping -c 1 $ipsub$i > /dev/null
  6.         if [ $? -eq 0 ];then
  7.             telnet $ipsub$i 22 > /dev/null 2>&1  <<! >tmp.txt
  8.              quit
  9.              !
  10.             grep -i 'escape' tmp.txt >/dev/null
  11.             if [ $? -eq 0 ];then
  12.                #添加ssh自动登录代码,这个没搞过。
  13.             fi


  14.         fi

  15.         let i=$i+1

  16. done
复制代码
bash中自动登录ssh,用expect ,网上找一下,有现成代码。

论坛徽章:
2
摩羯座
日期:2015-01-10 16:35:05摩羯座
日期:2015-01-25 22:10:41
6 [报告]
发表于 2014-11-27 11:34 |只看该作者
回复 5# zerostudy


    telnet $ipsub$i 22 > /dev/null 2>&1  <<! >tmp.txt
写好后使用bash -n  检查脚本提示 这一行有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP