背景
在linux机器安装服务时,有时候会禁止root用户登陆。
由于spark在启动时存在ssh的连接,如果仍然使用root用户启动spark,
就会出现要求用户输入root密码,导致spark无法直接启动
解决1:临时开启root登陆权限
##ansible_users可以作为参数传入或写到变量配置中
ansible_users=root
sshdget="`grep '^PermitRootLogin no' /etc/ssh/sshd_config |wc -l`"
sshdstatus="${sshdget}"
###为root用户做ssh免密登陆
function sshdSet(){
if [ "${ansible_users}" != "root" ];then
[ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
cat /root/.ssh/id_rsa.pub >> ${ansible_user_home}/.ssh/authorized_keys
fi
}
###开启
function sshdopen(){
if [ ${ansible_users} == "root" ];then
if [ $sshdstatus -gt 0 ];then
#echo -e "\e[33m开启sshd的root远程登录权限....\e[0m"
sed -i 's/PermitRootLogin.*/PermitRootLogin\ yes/g' /etc/ssh/sshd_config
service sshd restart
sshdstatus=1
else
sshdstatus=0
fi
##${baseDir}/server.sh 代表当前的shell文件
sed -i "s/^sshdstatus=.*/sshdstatus=\"${sshdstatus}\"/g" ${baseDir}/server.sh
else
echo -e "\e[33mchecking...\e[0m"
fi
}
###关闭
function sshdclose(){
if [ ${ansible_users} == "root" ];then
if [ $sshdstatus -gt 0 ];then
#echo -e "\e[33m关闭sshd的root远程登录权限....\e[0m"
sed -i 's/PermitRootLogin.*/PermitRootLogin\ no/g' /etc/ssh/sshd_config
service sshd restart
sshdstatus=0
else
sshdstatus=1
fi
sed -i 's/^sshdstatus=.*/sshdstatus="${sshdget}"/g' ${baseDir}/server.sh
else
echo -e "\e[33mchecking...\e[0m"
fi
}
在使用脚本开启root登陆权限后,启动spark,然后关闭root登陆权限
注:这种方法用于允许root临时开启的机器,如果root登陆一旦开启就会有告警,还是用方法二比较好
解决2:修改spark启动文件
修改配置文件spark-env.sh
修改spark相关的spark-env.sh:export SPARK_SSH_OPTS="-p 22 -l appadmin"
注:SPARK_SSH_OPTS参数中的22为当前ssh端口,appadmin为spark启动时指定的用户
修改启动配置,指定ssh用户,sbin/slaves.sh:
修改变量:SPARK_SSH_OPTS="-o StrictHostKeyChecking=no "
修改后:SPARK_SSH_OPTS="-o StrictHostKeyChecking=no -l ${ansible_user}"
注:-l指定用户 ${ansible_user}为自定义用户变量
可使用方式1或方式2任一条修改spark的启动用户 ,完成后进行如下修改:
修改启动配置start-slaves.sh sbin/stop-slaves.sh(为了保证spark进程拥有root权限)
spark启动的指定用户必须拥有ssh的免密登陆权限
ansible_users=appadmin
ansible_user_home="/home/${ansible_users}"
su ${ansible_users} -c "ssh-keygen -t rsa -P '' -f ${ansible_user_home}/.ssh/id_rsa"
su ${ansible_users} -c "cat ${ansible_user_home}/.ssh/id_rsa.pub >> ${ansible_user_home}/.ssh/authorized_keys"
chmod 710 ${ansible_user_home}/.ssh/authorized_keys