您的位置:首页 > 运维架构 > Shell

shell expect自动化创建用户,修改密码,多台机器一键免秘钥登录

2017-06-01 15:19 381 查看

1.创建用户–50台机器上创建用户,不可能手动去干的。

useradd.sh中的代码:

#!/bin/bash
user=cow
password=cow
useradd -d /home/$user $user
expect << EOF
spawn passwd $user
expect "New password:"
send "${password}\r"
expect "Retype new password:"
send "${password}\r"
expect eof;
EOF


执行该代码:





- 单台机器上执行该脚本那么多台机器呢?

- 还记得之前我们用过salt的这个工具么?

1.将该脚本传到其他机器上。只是一条指令就可以了。



这样就将该脚本传到所有的机器上了,*代表所有。

2.执行该脚本。我们以s2这个机器为例,如果所有那么也要用*表示



这里就是所有机器上执行创建用户并设置密码,当然所有的机器上都要安装expect否则就出现下面的错误:



2.修改创建用户后的密码:

repasswd.sh中的 内容:

#!/bin/bash
USER=wyl2
NPASS=wylwyl2
expect << EOF
spawn passwd  $USER
expect "New password:"
send "${NPASS}\r"
expect "Retype new password:"
send "${NPASS}\r"
expect eof;
EOF


执行该脚本后的效果图:



3.创建好用户,则可能需要各个机器之间的免秘钥登录:

该脚本中的内容

#!/usr/bin/expect
set timeout -1
#修改配置内容,需要免密码登录的用户
set user ooo
set password ooo
#需要免密码登录的机器
set ipmaster bgs-5p173-wangwenting
set ipslave2 bgs-5p174-wangwenting
set ipslave3 bgs-5p175-wangwenting
set path /home/$user
#创建秘钥
spawn ssh-keygen -t rsa
expect {
#第一次需要输入的enter键,exp_continue如果没有捕获到该信息的时候就跳过这个行为,执行下一次的行为。
".ssh/id_rsa" {send "\r";exp_continue}
"Overwrite" {send "y\r";exp_continue}
"(empty for no passphrase):" {send "\r";exp_continue}
"Enter same passphrase again" {send "\r";exp_continue}
}
spawn ssh-copy-id -i $path/.ssh/id_rsa.pub $user@$ipmaster
expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
spawn ssh-copy-id -i $path/.ssh/id_rsa.pub $user@$ipslave2
expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
spawn ssh-copy-id -i $path/.ssh/id_rsa.pub $user@$ipslave3
expect {
"*yes/no*" { send "yes\r"; exp_continue}
"*password:" { send "$password\r" }
}
expect eof


4.至于expect的内容,自行百度。

expect的材料

expect的教程
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐