Linux Shell如何用ssh命令统计分布式集群信息详解

2022-07-24 15:44:22
目录
一、统计分布式集群信息的思路二、SSH加密原理三、SSH命令四、利用ssh-keygen和ssh-copy-id 实现免密登录五、Linux Shell 脚本实现六、ssh只循环一次问题总结

一、统计分布式集群信息的思路

用免密的远程登陆命令,实现一台机器访问其他集群的机器。因此想要实现有几个重要步骤:

    学会shh的使用方法实现免密登录编写shell程序

    二、SSH加密原理

    非对称加密技术是一种加密和解密用的不同密钥的加密方法。其中RSA和DSA就是非对称加密方法。当然非对称加密算法有一个前提,就是有一对密钥可以相互加密和解密,通常这一对密钥就会成为持有者的公钥和私钥。公钥是其他人可以知悉的密钥,而私钥只能持有者自己知道。当然如果私钥泄露给外人,可能会有信息安全问题。

    假如:A要发送给B一个加密数据。第一种方法是:A用自己的私钥加密,B获得数据后用A的公钥解密。第二种方法是:A用B的公钥加密数据,B获得数据后再用自己的私钥解密。

    SSH远程登录用的是第一种方法。

    三、SSH命令

    常用的方法是

     ssh>

    其中私钥文件名默认为 $HOME/.ssh/id_rsa    或者 $HOME/.ssh/id_dsa ,端口号默认为22.  

    例如:

    ssh   myname@128.180.146.89  #输入目标主机的密码后进行远程操作,exit命令退出
    

    四、利用ssh-keygen和ssh-copy-id>
    ssh-keygen     #直接全部回车,先都默认
    

    然后会在$HOME/.ssh/   目录下生成一个密钥对文件,其中 *.pub统一为公钥文件,另外一个就是私钥文件。

    接下来把公钥文件中的内容拷贝到目标主机用户的 $HOME/.ssh/authorized_keys 中。拷贝方式可以自己手动操作。也可用如下命令实现

    ssh-copy-id -i [公钥文件名]  user$hostname

    例如  :

    ssh-copy-id -i  $HOME/.ssh/id_rsa.pub  myname@128.180.146.89
    

    然后再执行远程登录命令就可以实现免密登录啦。如果第二次登录还需要密码,可能是因为文件和文件目录权限问题。也可能是因为连接的私钥与公钥不是一对。

    五、Linux>

    sshtest.sh文件:

    #!/bin/bash
    func___setenv(){
       RTS_ECT_DIR="$HOME"
       #.....
    }
    ######################################
    #
    #   程序主体
    ######################################
     
    #调用环境变量
    func___setenv
     
    #读取机器连接信息
    while read line
    do
    ssh_cmd=
    ssh_linkhost=`echo ${line}`
        while  read  cmdline
        do
        #空命令行跳过
        if [ -z "$cmdline" ]; then
            continue 
        fi
        
        #读取的命令行拼接;
        if [ ! -n "$ssh_cmd" ]; then
            ssh_cmd=`echo ${$cmdline}` ;
        else
            ssh_cmd="${ssh_cmd};"`echo ${$cmdline}` ;
        fi
        done <${RTS_ECT_DIR}/sshcmd.cfg
    #执行远程命令
    ssh $ssh_linkhost $ssh_cmd </dev/null
    done <${RTS_ECT_DIR}/sshlink.cfg

    sshlink.cfg 文件:前提要先配好密钥才可以免密登录

    myname@128.180.146.89
    myName@128.180.146.90
    Myname@128.180.146.91
    

    sshcmd.cfg 文件:根据自己需要填写

    ps -ef|grep java 
    df -h 
    

    六、ssh只循环一次问题

    如果上述代码的倒数第二行如果改成

    ssh $ssh_linkhost $ssh_cmd
    

    那么while循环就只循环1次。因为while read line 会把循环信息放到标准输入中,而ssh命令会把输入缓存全部读光,因此while不在循环。所以ssh命令需要重定向

    总结

    到此这篇关于Linux Shell如何用ssh命令统计分布式集群信息的文章就介绍到这了,更多相关Linux Shell ssh命令统计集群信息内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!