批量修改主机名脚本

脚本思路:生成秘钥后,批量传输秘钥,根据hosts文件批量修改主机名。

运行环境:用户名统一是root,密码统一是123456

脚本

#!/bin/bash
# check expect first
#############################################################
passwd=123456
key=/root/.ssh/id_rsa
ip=`ifconfig eth0 | sed -n ‘2p‘| cut -d: -f2 | cut -d" " -f1`
lname=`cat /etc/hosts | grep ^$ip | awk ‘{print $2}‘`
# change local hostname
sed -i "s/^HOS.*/HOSTNAME=$lname/" /etc/sysconfig/network; hostname $lname
# ssh-keygen
if [ ! -f $key ];then
/usr/bin/expect <<END
spawn ssh-keygen -b 1024 -t rsa
expect "*id_rsa*"
send "\r"
expect "*passphrase):"
send "\r"
expect "*again:"
send "\r"
expect eof
END
fi
# ssh-copy-id
for dip in `cat /etc/hosts |grep -v $ip | awk ‘NR>2 {print $1}‘|grep -v ^#`
do
expect -c "
set timeout -1
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $dip
expect {
\"*yes/no*\" {exp_send \"yes\r\"; exp_continue}
\"*password:\" {send \"$passwd\r\"}
}
expect eof"
scp /etc/hosts $dip:/etc
name=`grep ^$dip /etc/hosts | awk ‘{print $2}‘`
ssh $dip "sed -i "s/^HOS.*/HOSTNAME=$name/" /etc/sysconfig/network"
ssh $dip "hostname $name"
done

注:

  1. 直接执行脚本即可,不需要加参数;
  2. 使用ssh链接的时候,第一次需要输入“yes”来确认,而第二次不需要,这个脚本中ssh-copy-id这一部分,用到了expect的类似于if判断的语句,解决了这个问题;
  3. 秘钥传输成功以后,可以把scp /etc/hosts $dip:/etc替换成想要传输的文件;把ssh $dip "hostname $name"替换成想要执行的命令。
时间: 2024-10-23 08:04:44

批量修改主机名脚本的相关文章

秘钥推送脚本,批量修改主机名

在生产环境线上,服务器统一命名是非常重要的,它遵循了环境标准化,使运维工程师能够更方便的管理线上服务器,当出现问题时,能够快速的定位问题.排查问题.解决问题. 编写脚本思路: 1.基于ssh-key生产秘钥 2.基于ssh与其他节点完成第一次交互(yes/no) 3.基于ssh-copy-id实现远程批量推送秘钥 4.基于sed来修改不同集群的不同主机名 测试环境:                   主机名                      IP               [[ema

Linux修改主机名脚本-不重启-支持RedHat、SUSE

需要用脚本修改主机名,涉及RedHat.SUSE系统,并且要求修改立即生效且不重启,下面就是我的脚本. 使用脚本的方法如下: 1 首先创建一个脚本文件,假如命名为ModifyHostname.sh: touch ModifyHostname.sh 2 然后给这个文件给这个文件赋予执行权限:chmod a+x ModifyHostname.sh 3 把下面的脚本内容,复制到ModifyHostname.sh文件中 4 执行脚本 sh ModifyHostname.sh Newhostname  

用于阿里云批量修改主机名

import paramiko import sys,os host_list=[ #主机名,ip ['app176','192.168.100.1',], ] def hostname():     s = paramiko.SSHClient()     s.load_system_host_keys()     s.set_missing_host_key_policy(paramiko.AutoAddPolicy())     for host in host_list:        

修改主机名脚本

#!/bin/bash if [ $# == 1 ] then HOSTNAME=$1 else echo "脚本执行需要参数,例如[sh *.sh test]" exit fi sed -i "s#`uname -n`#$1#g" /etc/sysconfig/network sed -i "s#`uname -n`#$1#g" /etc/hosts grep $1 /etc/hosts hostname $1 偶尔需要用到,暂且放到博客上,防

python 批量修改主机名

公司需要新上项目,上架20台机器,要对这些主机进行改名 #!/usr/bin/env python from multiprocessing import Process, Pool import paramiko import sys,os s = paramiko.SSHClient() s.load_system_host_keys() s.set_missing_host_key_policy(paramiko.AutoAddPolicy()) def ssh_run(host_info

编写批量修改扩展名脚本

第一种方法: [[email protected] localhost shell]# vim s8.sh #!/bin/bash for i in `ls *.$1` do mv $i ${i%.*}.$2 done 第二种方法: [[email protected] localhost shell]# vim s81.sh #!/bin/bash for i in `ls *.$1` do echo $1 name=`echo $i |awk -F '.' '{print $1}'` mv

Windows脚本修改主机名-不重启

windows通过脚本方式修改主机名的方法有很多种,下面介绍修改注册表方式的脚本. 使用方法: 1 打开cmd,假如脚本名为ModifyHostname.bat 2 执行脚本,并加入脚本参数,其中第一个参数是新主机名,第二个参数是工作组,下面的脚本把工作组注释掉了 ModifyHostname.bat Newhostname NewWorkgrop @echo off set name=%1% set work1=%2% reg add "HKEY_LOCAL_MACHINE\System\Cu

笔记二:ansible批量设置主机名

批量设置主机名 系统环境:debian 8 本机ip   :180.76.169.6 被管理机:218.60.33.2 .218.60.33.3.218.60.33.4.218.60.33.5 更新时间: 2017-2-27 1. 在/etc/ansible/hosts配置主机信息(主机名需先在hosts设置好) [email protected]:~$ cat /etc/ansible/hosts # This is the default ansible 'hosts' file. # #

Linux篇 | CentOS6、CentOS7、Ubuntu1804修改主机名、网卡、网络

主机名 CentOS6: 修改"/etc/sysconfig/network"文件,建议在把"/etc/hosts"文件里的主机名也改了,因为此文件的作用是:把主机名解析成本地IP地址(127.0.0.0),修改后重启生效,或者用"hostname 新主机名"命令临时设置,之后注销重新登录即可. CentOS7: 1.配置文件:/etc/hostname ,默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.local