一键创建用户脚本

此脚本用户一键创建具有sudo权限的账户 并且可以免密使用sudo

id openpai &>/dev/null   #验证用户是否存在
if [ $? -eq 0 ];then
		echo "用户已经创建了"
	else
		echo "用户即将开始创建"
		useradd  -m -s /bin/bash openpai
		echo "用户创建成功"
		echo "正在设置密码"
		echo "openpai:openpai" | sudo chpasswd #给用户设置密码
		echo "密码设置成功"
		echo "openpai"

fi
echo "正在设置sudo权限"
mkdir /etc/sudoers.d/
echo openpai | sudo -S sh -c "echo 'openpai ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers.d/user-openpai"
sudo chmod 440 /etc/sudoers.d/user-openpai

批量ssh免密登录脚本

#!/usr/bin/bash

shell_dir=$(dirname "$0")
SHELL_DIR_ABSOLUTE=$(cd "$shell_dir"; pwd)
EXIST_DOWN_HOST="NO"
SSH_HOME_DIR="/root"

if ! which expect &>/dev/null; then
  if ! rpm -q tcl &>/dev/null; then
    [ -e "$SHELL_DIR_ABSOLUTE"/tcl-8.5.13-8.el7.x86_64.rpm ] && rpm -Uvh "$SHELL_DIR_ABSOLUTE"/tcl-8.5.13-8.el7.x86_64.rpm
  fi
  if ! rpm -q expect &>/dev/null; then
    [ -e "$SHELL_DIR_ABSOLUTE"/expect-5.45-14.el7_1.x86_64.rpm ] && rpm -Uvh "$SHELL_DIR_ABSOLUTE"/expect-5.45-14.el7_1.x86_64.rpm
  fi
fi

if ! which expect &>/dev/null; then
  echo "No expect is installed on the system"
  exit 1
fi

if ! [ -e "$SHELL_DIR_ABSOLUTE"/host.list ]; then
  echo "file $SHELL_DIR_ABSOLUTE/host.list does not exist"
  exit 1
fi

if [ "$USER" != "root" ]; then
  SSH_HOME_DIR="/home/$USER"
fi

[ -e $SSH_HOME_DIR/.ssh/id_rsa.pub -a ! -e $SSH_HOME_DIR/.ssh/id_rsa ] && rm -rf $SSH_HOME_DIR/.ssh/id_rsa.pub
[ ! -e $SSH_HOME_DIR/.ssh/id_rsa.pub -a -e $SSH_HOME_DIR/.ssh/id_rsa ] && rm -rf $SSH_HOME_DIR/.ssh/id_rsa
[ -e $SSH_HOME_DIR/.ssh/id_rsa.pub -a -e $SSH_HOME_DIR/.ssh/id_rsa ] || ssh-keygen -t rsa -f $SSH_HOME_DIR/.ssh/id_rsa -N '' >/dev/null 2>&1

while read host_info
do
  host_ip=$(echo $host_info | cut -d ' ' -f 1)
  if ping -c 1 -w 3 $host_ip &>/dev/null; then
    echo "  up -> $host_ip"
  else
    echo -e "\033[31mdown -> $host_ip\033[0m"
    EXIST_DOWN_HOST="YES"
  fi
done < "$SHELL_DIR_ABSOLUTE"/host.list

unset host_info
unset host_ip

if [ "$EXIST_DOWN_HOST" != "NO" ]; then
  echo "There are servers that cannot be connected"
  exit 1
fi

while read host_info
do
host_ip=$(echo $host_info | cut -d ' ' -f 1)
host_username=$(echo $host_info | cut -d ' ' -f 2)
host_password=$(echo $host_info | cut -d ' ' -f 3)
expect <<-EXPECT
set timeout -1
spawn ssh-copy-id $host_username@$host_ip
expect {
  "*(yes/no)" {
    send "yes\r"
    exp_continue
  }
  "*password:" {
    send "$host_password\r"
    exp_continue
  }
  eof {
    exit 0
  }
}
EXPECT
done < "$SHELL_DIR_ABSOLUTE"/host.list
unset host_info
unset host_ip
unset host_username
unset host_password

while read host_info
do
{
host_ip=$(echo $host_info | cut -d ' ' -f 1)
host_username=$(echo $host_info | cut -d ' ' -f 2)
echo "正在测试 $host_username@$host_ip ..."
if timeout 4 ssh $host_username@$host_ip "echo 0 $>/dev/null"; then
  echo "$host_username@$host_ip 测试成功 √"
else
  echo -e "\n\n\033[31m$host_username@$host_ip cannot be ssh connected\033[0m\n\n"
  echo 1 > /tmp/8585324c6aa741ad8d3ebebb4aa9c7ba.check.ssh
fi
}&
done < "$SHELL_DIR_ABSOLUTE"/host.list
wait

if [ -e /tmp/8585324c6aa741ad8d3ebebb4aa9c7ba.check.ssh ]; then
  rm -rf /tmp/8585324c6aa741ad8d3ebebb4aa9c7ba.check.ssh
  echo -e "结果:测试失败 ×\n\n"
  exit 1
else
  echo -e "\n\n全部:测试成功 √\n\n"
fi

脚本需要使用host.list文件进行设置需要连接的主机地址以及用户名,例如:

ip 用户名 密码

192.168.1.2 openpai openpai
192.168.1.3 openpai openpai
192.168.1.99 openpai openpai
192.168.1.98 openpai openpai