说明:该脚本读取machine.txt文件中的机器名,然后批量ssh登录,获取每台机器的操作系统,CPU,内存,硬盘等信息。

使用方法:将文件保存为sh,chmod +x filename 为该sh文件赋予执行权限。

for line in `cat machine.txt`
do
echo $line "的信息"
echo "操作系统:" `ssh -ttq -o StrictHostKeyChecking=no $line /usr/bin/lsb_release -a |grep Description |awk -F : '{print $2}' |sed 's/^[ \t]*//g'`
#echo "操作系统版本号:" `ssh -ttq -o StrictHostKeyChecking=no $line uname -m`
echo "CPU型号:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo|grep 'model name' |uniq |awk -F : '{print $2}' |sed 's/^[ \t]*//g' |sed 's/ \+/ /g'`
echo "物理CPU个数:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
echo "每个物理CPU上Core的个数:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo | grep "core id" | sort | uniq | wc -l`
echo "逻辑CPU个数:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/cpuinfo | grep "processor" | sort | uniq | wc -l`
echo "内存大小为:" `ssh -ttq -o StrictHostKeyChecking=no $line cat /proc/meminfo |grep MemTotal|awk '{print $2/1048576}'` "G"
echo "硬盘个数:" `ssh -ttq -o StrictHostKeyChecking=no $line df -a|grep "/dev/sd"|awk '{print $1}'|cut -b 1-8|sort|uniq|wc -l`
echo "硬盘大小为:" `ssh -ttq -o StrictHostKeyChecking=no $line df -k | grep -v "tmpfs" | awk 'NR>1&&NF>1{print $(NF-4)}' | awk -v total=0 '{total+=$1}END{printf "%.2f\n",total/1048576}'`
echo "===================================================================================================="
done

特殊说明:$line中为ssh的登录名,因为该处对ssh进行过改造,登录时无需密码,因此可以直接ssh登录成功。如果未经改造,此处ssh需要进行改造。

提供两个思路:

一、将客户端的公钥托管到要登录的ssh机器的/root/.ssh/authorized_keys中,即可利用公钥和私钥进行无秘钥登录了。

二、except解释器

这个解释器实现了交互式任务的解释器。主要包括以下命令:

spawn命令:

spawn command命令会fork一个子进程去执行command命令,然后在此子进程中执行后面的命令;

在ssh自动登陆脚本中,我们使用 spawn ssh user_name@ip_str,fork一个子进程执行ssh登陆命令;

expect命令:

expect命令是expect解释器的关键命令,它的一般用法为 expect "string",即期望获取到string字符串,可在在string字符串里使用 * 等通配符;

string与命令行返回的信息匹配后,expect会立刻向下执行脚本;

set timeout命令:

set timeout n命令将expect命令的等待超时时间设置为n秒,在n秒内还没有获取到其期待的命令,expect 为false,脚本会继续向下执行;

send命令:

send命令的一般用法为 send "string",它们会我们平常输入命令一样向命令行输入一条信息,当然不要忘了在string后面添加上 \r 表示输入回车;

interact命令:

interact命令很简单,执行到此命令时,脚本fork的子进程会将操作权交给用户,允许用户与当前shell进行交互;

#!/usr/bin/expect                   // 指定shebang

set timeout 3                       // 设定超时时间为3秒
spawn ssh user_name@172.***.***.*** // fork一个子进程执行ssh命令
expect "*password*" // 期待匹配到 'user_name@ip_string's password:'
send "my_password\r" // 向命令行输入密码并回车
send "sudo -s\r"
send "cd /data/logs\r" // 帮我切换到常用的工作目录
interact // 允许用户与命令行交互

扩展:

shell实现的方法固然方便,但是对于密码登录登录实在不友好。因此在脚本方面,我们利用最方便的python进行了参考。

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 跳过了远程连接中选择‘是’的环节,
ssh.connect('IP', 22, '用户名', '密码')
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()

  利用paramiko库进行批量ssh登录,很是方便。

当然也可以用client端的公钥托管到server端也是可以。

client端ssh.keygen -t rsa生成公钥和私钥,将公钥发送给server. ssh-copy-id -i ~/ssh/id_rsa.pub server@IP
import paramiko

private_key_path = '/home/auto/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path) ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('IP', 22, '用户名', key)
stdin, stdout, stderr = ssh.exec_command('df')
print stdout.read()

  $ ssh morra@192.168.1.42 #用户名密码登录

  $ ssh 'morra@192.168.1.42' #公钥免密登录

批量ssh登录,获取操作系统、CPU、内存、硬盘信息<shell>的更多相关文章

  1. VPS性能测试:CPU内存,硬盘IO读写,带宽速度,UnixBench和压力测试

    现在便宜的VPS主机越来越多了,一些美国的VPS主机甚至给出1美元一月的VPS,堪比虚拟主机还要便宜,巨大的价格优势吸引不少人购买和使用,而近些年来国内的主机商也开始意识到便宜的VPS对草根站长的诱惑 ...

  2. Windows 性能监视器的基本指标(CPU,内存,硬盘参数)

    转载:http://kms.lenovots.com/kb/article.php?id=7045 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的 ...

  3. Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数)

    [转]Windows 性能监视器的基本指标说明(CPU,内存,硬盘参数) 作为一个系统工程师来说,要看懂监控的数据至关重要,关系着优化和分析出现的问题.我是在运维过程中要用到的.因此,今天给出Wind ...

  4. 一个统计 CPU 内存 硬盘 使用率的shell脚本

    一个统计 CPU 内存 硬盘 使用率的shell脚本,供大家学习参考 #!/bin/bash #This script is use for describle CPU Hard Memery Uti ...

  5. 主机性能监控之wmi 获取系统信息及内存性能信息

    标 题: 主机性能监控之wmi 获取系统信息及内存性能信息作 者: itdef链 接: http://www.cnblogs.com/itdef/p/3990240.html 欢迎转帖 请保持文本完整 ...

  6. centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息

    1.系统 1.1版本 uname -a 能确认是64位还是32位,其它的信息不多 [root@localhost ~]# uname -a Linux localhost.localdomain 3. ...

  7. 获取本机内存使用信息、DataTable占用内存空间

    相当于windows系统中的任务管理器,功能是通过系统的API实现的本机的监视,代码如下 using System;using System.Collections.Generic;using Sys ...

  8. DSAPI 获取实时统计信息CPU/内存/硬盘/网络

    有时,我们需要获取当前计算机中CPU.内存.硬盘.网络等实时信息,如下图:\ 要实现上述几项信息的获取,通常需要使用Timer控件来间隔获取,以便刷新最新的数据. 本示例中,放一个Timer控件,放一 ...

  9. C# 获取计算机cpu,硬盘,内存相关的信息

    using System;using System.Management; namespace MmPS.Common.Helper{ /// <summary> /// 获取计算机相关的 ...

随机推荐

  1. [转载]asp.net mvc: why is Html.CheckBox generating an additional hidden input

    http://stackoverflow.com/questions/2697299/asp-net-mvc-why-is-html-checkbox-generating-an-additional ...

  2. 20155223 2016-2017-2 《Java程序设计》第7周学习总结

    20155223 2016-2017-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十二章 Lambdo表达式下,任何参数的类型必须标明清楚:如果有目标类型的话,在编译程序可 ...

  3. UVA1386 【Cellular Automaton】题解

    题面:UVA1386 Cellular Automaton 矩阵乘法+快速幂解法: 这是一个比较裸的有点复杂需要优化的矩乘快速幂,所以推荐大家先做一下下列洛谷题目练练手: (会了,差不多就是多倍经验题 ...

  4. 使用TS+Sequelize实现更简洁的CRUD

    如果是经常使用Node来做服务端开发的童鞋,肯定不可避免的会操作数据库,做一些增删改查(CRUD,Create Read Update Delete)的操作,如果是一些简单的操作,类似定时脚本什么的, ...

  5. 排序算法的java实现

    冒泡.选择就不写了.很常见 一:插入排序: /** * 插入排序 */ public class P4_3 { static void insertSort(int[] a){ int j,t; /* ...

  6. aarch64_o2

    opensips-event_rabbitmq-2.2.3-1.fc26.aarch64.rpm 2017-03-10 01:22 42K fedora Mirroring Project opens ...

  7. 07 go语言

    Home   Alexey Palazhchenko edited this page on 9 Jul · 89 revisions Welcome to the Go wiki, a collec ...

  8. python网络编程-进程间数据通信(Queue,Pipe ,managers)

    一:进程间数据交换方法 不同进程间内存是不共享的,要想实现两个进程间的数据交换,可以用以下方法: Queue,Pipe ,managers 1)Queue,使用方法跟threading里的queue差 ...

  9. java基础46 IO流技术(输出字符流/缓冲输出字符流)

    一.输出字符流 1.1.输出字符流体系 --------| Writer:输出字符流的基类(抽象类)  ----------| FileWriter:向文件输出数据输出字符流(把程序中的数据写到硬盘中 ...

  10. git —— 远程仓库(创建)

    一.SSH设置 1.创建SSH Key 在用户主目录下,看看有没有.ssh目录, 如果有,再看看这个目录下 有没有id_rsa和id_rsa.pub这两个文件, 如果已经有了,可直接 跳到下一步. 如 ...