shell脚本配置ssh免密登陆
通过shell脚本配置免密登陆,分为两个脚本,一个是配置文件config.env,一个是正式脚本sshkey.sh。
# config.env
export HOST_USER=(root)
export PASSWD=(a)
export SSH_HOST=(192.168.165.15 192.168.165.16 192.168.165.165)
以上congfig.env文件中,SSH_HOST参数可配置多个IP,可配置不同的用户
sshkey.sh脚本内容大致如下:
- 在本地用rsa加密方式生成对应的密钥,并将公钥写入到authorized_keys文件中;
- 遍历多台远程服务器,登陆远程服务器生成密钥,并将公钥文件考本到本机,写入本机的authorized_Keys文件中;
- 遍历多台远程服务器,将本地的authorized_Keys文件分别分发到各台服务器上。
#!/bin/bash
# sshkey.sh
source config.env createLocalKey () {
/usr/bin/expect <<_oo_
spawn ssh-keygen -t rsa -b -N "" -f $HOME/.ssh/id_rsa
expect "Overwrite"
send "y\r"
expect eof
_oo_
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
} createRemoteKey () {
/usr/bin/expect <<_oo_
spawn ssh $HOST_USER@$ip
expect {
"yes/no" { send "yes\r";exp_continue }
"*assword:" { send "$PASSWD\r" }
}
sleep
send "ssh-keygen -t rsa -b 2048 -N '' -f $HOME/.ssh/id_rsa\r"
expect {
"(y/n)" { send "y\r" }
}
sleep
send "exit\r"
expect eof
_oo_ /usr/bin/expect <<_oo_
spawn scp $HOST_USER@$ip:$HOME/.ssh/id_rsa.pub /tmp/id_rsa$ip.pub
expect {
"yes/no" { send "yes\r";exp_continue }
"*assword:" { send "$PASSWD\r" }
}
expect eof
_oo_ cat /tmp/id_rsa$ip.pub >> $HOME/.ssh/authorized_keys
rm -rf /tmp/id_rsa$ip.pub
} copyToRemote () {
/usr/bin/expect <<_oo_
spawn scp $HOME/.ssh/authorized_keys $HOST_USER@$ip:$HOME/.ssh/authorized_keys
expect {
"yes/no" { send "yes\r";exp_continue }
"*assword:" { send "$PASSWD\r" }
}
expect eof
_oo_
} pullPubKey () {
for ip in ${MHA_HOST[@]};do
if [ $ip == `ifconfig eth0|grep -oP '(?<=inet addr:)\S+'` ];then
echo "It's local host"
else
createRemoteKey
fi
done
} pushAuthorizedKeys () {
for ip in ${MHA_HOST[@]};do
if [ $ip == `ifconfig eth0|grep -oP '(?<=inet addr:)\S+'` ];then
echo "It's local host"
else
copyToRemote
fi
done
} taskMain () {
createLocalKey
pullPubKey
pushAuthorizedKeys
} red_echo () { echo -e "\033[031;1m$@\033[0m"; }
green_echo () { echo -e "\033[032;1m$@\033[0m"; } taskMain; rc=$?
if [ $rc -ne ] ;then
echo "$(red_echo Config ssh without password failed!)"
else
echo "$(green_echo Config ssh without password success!)"
fi
exit $rc
如有更好的解决方案,望留言指出,谢谢
shell脚本配置ssh免密登陆的更多相关文章
- Shell脚本实现SSH免密登录及批量配置管理
本节索引 场景分析 ssh免密登录 pssh工具批量管理 SHELL自动化脚本 本篇总结 场景分析 作为一个运维工程师,不是每个人工作的环境都想阿里.腾讯那样,动不动就上亿的PV量,上万台服务器.我们 ...
- 分布式配置 SSH 免密登陆
原地址忘记了,暂且记下 一.准备工作 1) 用客户端工具(ssh client或者putty)连接到linux服务器.在root用户下输入命令 vi /etc/hosts,用vi编辑hosts文件,如 ...
- Linux多台主机间配置SSH免密登陆
1.安装ssh. sudo apt-get install ssh. 安装完成后会在~目录(当前用户主目录,即这里的/home/xuhui)下产生一个隐藏文件夹.ssh(ls -a 可以查看隐藏文件 ...
- Linux 配置SSH免密登陆
1.在hadoop01服务器上 通过ssh -keygen 生成公私钥 [ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa] 2.把公钥给hadoop02服务器 3. ...
- [提供可行性脚本] RHEL/CentOS 7 多节点SSH免密登陆
实验说明: 在自动化部署时,会经常SSH别的机器去操作,然而每次的密码认证却很令人烦躁,尤其是很长的密码,因此SSH免密登陆就显得必不可少: 在机器数目很多的时候,使用更过的往往是Ansible分发并 ...
- ssh免密登陆配置
目录 ssh免密登陆 在A工作站上输入 B服务器上输入 登陆 ssh初次登陆询问 1.单次取消 2.ansible中增加链接参数 3.修改ansible配置参数[推荐] 4.修改服务器上的ssh_co ...
- SSH免密登陆配置过程和原理解析
SSH免密登陆配置过程和原理解析 SSH免密登陆配置过很多次,但是对它的认识只限于配置,对它认证的过程和基本的原理并没有什么认识,最近又看了一下,这里对学习的结果进行记录. 提纲: 1.SSH免密登陆 ...
- ssh免密登陆 2
应用场景之一:java 程序调用shell脚本,通过ssh 免密登陆数据库服务器,进行数据的抽取打包工作. 免密设置步骤: 1.客户端生成公私钥,在任意目录下执行命令ssh-keygen(一路回车默认 ...
- SSH免密登陆原理及实现
声明:作者原创,转载注明出处. 作者:帅气陈吃苹果 一.SSH简介 SSH(Secure Shell)是一种通信加密协议,加密算法包括:RSA.DSA等. RSA:非对称加密算法,其安全性基于极其困难 ...
随机推荐
- js进阶 9-9 html控件如何实现回车键切换焦点
js进阶 9-9 html控件如何实现回车键切换焦点 一.总结 一句话总结:在onkeydown事件中判断event对象的键位码,然后focus事件. 二.js进阶 9-9 html控件如何实现回车键 ...
- Tricks(四十七)—— 布尔矩阵(0-1矩阵)取反
假定 X 是一个 0-1 元素构成的布尔矩阵,则对其取反,0 变成 1,1 变为 0(True 变为 False,False 变成 True),只需要一步简单的操作: Y = (X == False)
- CodeBlocks 配色方案设置
最终效果(官方sublime修改版) 官方配色 codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增 ...
- Tomcat下部署SpringBoot
SpringBoot默认支持Tomcat7及以上版本(SpringBoot默认支持servlet3.1版本及以上,Tomcat6只支持到servlet2.5) 测试环境:jdk1.8 + tomcat ...
- TCP可靠的传输机制
TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(一般是一个客户和一个server)在彼此交换数据包之前必须先建立一个TCP连接.这一过程与打电话非常相似.先拨号振铃,等 ...
- JAVA SortedMap接口
SortedMap接口主要提供有序的Map实现. Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap. TreeMap实现了SortedMap接口,保证了 ...
- 实现在 .net 中使用 HttpClient 下载文件时显示进度
在 .net framework 中,要实现下载文件并显示进度的话,最简单的做法是使用 WebClient 类.订阅 DownloadProgressChanged 事件就行了. 但是很可惜,WebC ...
- HDU 1671 (字典树统计是否有前缀)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1671 Problem Description Given a list of phone number ...
- 使用带ParserContext参数的Xaml.Load方法
原文:使用带ParserContext参数的Xaml.Load方法 如果一段XAML中存在一个标记需要从外部命名空间中解析, 就需要用到ParserContext类, 具体用法如下: Normal ...
- Qt控件焦点切换
们日常切换控件,例如QQ登陆的账号和密码输入框就可以通过Tab键切换焦点. 图1 qq切换焦点 Qt中QWidget提供了一个静态方式实现该效果 其中也包含介绍使用 [static] void QW ...