[工具] Shell 批量实现其他多台电脑可以免密码 SSH 本电脑

介绍

基本信息

作者:朱明宇
名称:批量实现其他多台电脑可以免密码 SSH 本电脑
作用:批量将其他多台电脑的公钥拷贝给本电脑

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

1. nm=192.168.4.0 #网段,网段必须为 C 类网段,请保证格式和前 3 个网络位一定正确
2. sip=51 #起始 ip,起始 IP 地址,IP 地址 的范围是 0-255
3. lip=51 #结束 ip ,结束 IP 地址,IP 地址 的范围是 0-255
4. pd=123456 #其他服务器的 root 远程登录密码
5. lpd=Taren1 #本机的 root 远程登录密码
6. lh=192.168.4.254 #本机 IP 地址

注意

1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 必须以 root 用户执行本脚本

脚本

#!/bin/bash

####################### Separator ########################

nm=192.168.4.0 #Network segment. The network segment must be a class C network segment. Please ensure that the format and the first three network bits are correct
sip=51 #Starting IP, starting IP address. The range of IP address is 0-255
lip=51 #End IP, end IP address. The range of IP address is 0-255
pd=123456 #Root remote login password of other servers
lpd=Taren1 #Root remote login password of this machine
lh=192.168.4.254 #Native IP address

####################### Separator ########################

fnm=${nm%.*}

set timeout 3
rpm -q expect

if [ $? -ne 0 ];then
        yum -y install expect &> /dev/null
fi

for i in `seq $sip $lip`
do
        expect << EOF
        spawn ssh root@$fnm.$i
        expect "(yes/no)?"                               {send "yes\r" } 
        expect "password:"                               {send "$pd\r" } 
        expect "#"                                       {send "ssh-keygen\r"}
        expect "(/root/.ssh/id_rsa):"                    {send "\r"}
        expect "(empty for no passphrase):"              {send "\r"}
        expect "passphrase again:"                       {send "\r"}
        expect "#"                                       {send "\r"}
        EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "password:"                               {send "$pd\r" } 
expect "#"                                       {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):"                    {send "\r"}
expect "(empty for no passphrase):"              {send "\r"}
expect "passphrase again:"                       {send "\r"}
expect "#"                                       {send "\r"}
EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "(yes/no)?"                               {send "yes\r" } 
expect "#"                                       {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):"                    {send "\r"}
expect "(empty for no passphrase):"              {send "\r"}
expect "passphrase again:"                       {send "\r"}
expect "#"                                       {send "\r"}
EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "#"                                       {send "ssh-keygen\r"}
expect "(/root/.ssh/id_rsa):"                    {send "\r"}
expect "(empty for no passphrase):"              {send "\r"}
expect "passphrase again:"                       {send "\r"}
expect "#"                                       {send "\r"}
EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "password:"                      { send "$pd\r" } 
expect "#"                              { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "(yes/no)?"                      { send "yes\r" } 
expect "root@$lh's password:"           { send "$lpd\r" }
expect "#"                              { send "exit\r" }
EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "password:"                      { send "$pd\r" } 
expect "#"                              { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "root@$lh's password:"           { send "$lpd\r" }
expect "#"                              { send "exit\r" }
EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "#"                              { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "(yes/no)?"                      { send "yes\r" } 
expect "root@$lh's password:"           { send "$lpd\r" }
expect "#"                              { send "exit\r" }
EOF

expect << EOF
spawn ssh root@$fnm.$i
expect "#"                              { send "ssh-copy-id -i ~/.ssh/id_rsa.pub root@$lh\r" }
expect "root@$lh's password:"           { send "$lpd\r" }
expect "#"                              { send "exit\r" }
EOF

echo "$fnm.$i has been finished"

done

开源简介

开源对于人们而言,意味着免费使用,可随意进行二次开发,但是二次开发的内容、代码也属于开源项目的一部分必须无偿公开,且开源项目里的所有东西都不能当作商品进行买卖。而开源项目本身就像是一个爱好者们的盛会,全世界的所有爱好者和从业者们,利用业余时间或者在工作中为同一个项目添砖加瓦,发展到后来,也有人以公司的形式参与其中或者直接以公司的形式经营开源项目。

兴趣才是最好的老师, 所以在开源的领域总是充满了活力和创造力。从 Linux 和 Windows、Mariadb 和 Oracle 等开源和闭源软件的比较中,我们都能看到开源的力量。Windows 在服务区领域的市场份额不断被 Linux 压缩,Mariadb 的快速提升,阿里巴巴的去 Oracle 运动都在提醒 IT 的从业人员们,最好跟着开源走,不要让自己的职业生涯被某一家公司绑定得太死,可能诺基亚放弃 Meego 只会让自己的财务报表不好看,但是对于相关软件的开发者而言,这就以为着很多努力和光阴都要从头再来……

永恒中心会为访问者带来很多开源软件的信息和使用方法,不管你是相关行业的从业人员,还是相关方面的爱好者,你都可以关注永恒中心。

公元 2019 年 [事件] —— 永恒中心诞生

在地球上,我们智人是现存唯一一个拥有复杂语言系统和文字的物种。我们的祖先曾和各式各样的生物进行过生存竞争,有拥有尖牙利爪的剑齿虎,有拥有庞大体型的猛犸象,也有像直立人、尼安德特人等和我们同是人类的人科物种,但最终我们在这些竞争中幸存了下来。

我们的祖先并没有像直立人和尼安德特人那样拥有强壮的体魄,可直立人在与智人竞争的过程中,因无法传达重要的信息而被消灭。而尼安德特人因为同时拥有复杂的大脑和庞大的身体,需要比智人更多的食物,维持生命的消耗太大,在和智人进行食物争夺的过程中逐步走向灭亡。

我们的生存和延续,依靠的就是信息的力量,我们智人比起其他生物最大的优势,就是对信息的保存和传播能力 (尼安德特人对信息的保存和传播能力可能和我们相当)。在人类历史的进程中,例如像造纸术、印刷术、电报的发明对于思想、科技传播的促进,又例如像美国独立战争、两次世界大战时情报对战争起到的作用,已经充分说明了信息的价值。而如今建立在互联网之上的信息时代,更是一个空前放大智人信息优势的时代。

在信息时代早期理查德·马修·斯托曼等先驱开创的开源理念,让全世界所有的人都能平等地参与到某一项目的发展中来,公平参与和公平使用的稳定环境,全面激发了软件、数据库等行业的创新活力。全世界热爱或从事这一领域的人们不停地在这些项目上添砖加瓦。事实证明哪怕是全世界最顶端的系统公司微软,也将逐步被开源的 Linux 系统挤出服务器系统领域,被开源的力量击败。最能激发人类创造力和生产力的,是人类通过自我生活方式产生的兴趣和爱好,而不是对财富的渴求或者生存的压力。因此很多公司都被迫将自己的软件开源,参与其他的开源项目,或者直接以开源的方式经营自己的项目。

开源的活力使得我们的信息时代以空前的速度发展,从最早美国军方实验室里的两台计算机互通字母,到全球计算机的同时通信,再到 Apache 的分布式云计算、Google 的人工智能开源项目。智人对于各类信息的掌控能力以前所未有的速度在增长,地球上的所有行业都在从 IT 行业中受益,提升自己的生产效率。

同时开源思想空前拉低了进入 IT 行业的门槛,任何人,不管他是政府高官身处权力的中心、世界首富拥有巨额的财富、大学教授拥有院士的身份,还是只是一个初中学历的平民,在一个个领先世界行业的开源项目面前全都是平等的。开源项目的新技术将同时向全世界公布,不属于某一个人或者某一个国家、公司,谁更愿意花时间和精力去学习去了解,谁更热爱思考能提出具有创造性的改进,提高整个行业或者整个人类的生产力,谁在这一领域就是大神就更会被尊敬。

信息时代和开源时代在不断改变人们的生活方式,同时也让我们很方便地向世界发出自己的声音,扩展了我们语言和文字的优势。永恒中心 (EternalCenter.com) 就是依靠 Linux、MariaDB、PHP、Wordpress 等开源项目建立起来的网站,站主在此感谢这些开源项目的开发者和团队。

永恒中心 (EternalCenter.com) 将向访问者分享人类历史的瞬间、名人名言、世界名著经典、开源信息、网站建设等人类文明的思想、各种历史事件以及网站建设的技术,让访问者既能逐渐提高自我的思想内涵,同时也能拥有向世界发布自我声音的能力,扩展我们祖先战胜其他物种的优势。相关行业的人员也许也能从本站学到一定的工作经验和技术……

在未来的时光里,永恒中心 (EternalCenter.com),将一直陪伴大家,站主提前感谢大家的每一次访问和阅读。

[工具] Shell 批量实现本电脑免密码 SSH 多个服务器

介绍

基本信息

作者:朱明宇
名称:批量实现本电脑免密码 SSH 多个服务器
作用:将主本机的 SSH 公钥批量拷贝给其他多个远程服务器

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

1. nm=192.168.4.0 #网段,网段必须为 C 类网段,请保证格式和前 3 个网络位一定正确
2. sip=50 #起始 IP 地址,IP 地址 的范围是 0-255
3. lip=57 #结束 IP 地址,IP 地址 的范围是 0-255
4. pd=123456 #其他服务器的 root 远程登录密码

脚本

#!/bin/bash

####################### Separator ########################

nm=192.168.4.0
sip=50
lip=57
pd=123456

####################### Separator ########################

fnm=${nm%.*}

set timeout 3
rpm -q expect

if [ $? -ne 0 ];then
        yum -y install expect &> /dev/null
fi

cat /root/.ssh/id_rsa &> /dev/null

if [ $? -ne 0 ];then

        expect << EOF
        spawn ssh-keygen
        expect "(/root/.ssh/id_rsa):"                    {send "\r"}
        expect "(empty for no passphrase):"              {send "\r"}
        expect "passphrase again:"                       {send "\r"}
        expect "#"                                       {send "\r"}
        EOF

fi

for i in `seq $sip $lip`
do
        echo $fnm.$i
        ping -c3 -i0.3 -w1 $fnm.$i &> /dev/null
        if [ $? -ne 0 ];then
                echo "$fnm.$i can't be connected"
                continue
        fi

        expect << EOF
        spawn ssh-copy-id $fnm.$i
        expect "? "                                      {send "yes\r"}
        expect "password:"                               {send "$pd\r"}
        expect "#"                                       {send "\r"}
        EOF

        expect << EOF
        spawn ssh-copy-id $fnm.$i
        expect "password:"                               {send "$pd\r"}
        expect "#"                                       {send "\r"}
        EOF

        echo "$fnm.$i has been finished"
done