这里分享一下SSH免密脚本,主要还是通过sshpass来实现的。
文件大概就是两个,一个用于执行脚本的sshpass.sh,一个则是存放IP、端口、用户名、密码的properties文本。
首先是 sshpass.sh脚本。
# 加载操作系统环境
source /etc/profile
# 统一使用英文的UTF-8字符集
export LANG=en_US.UTF-8
# 设置本地 SSH 密钥文件路径
LOCAL_SSH_PUBLIC_KEY=~/.ssh/id_ed25519.pub
function keyless_configuration(){
# 检查 Ed25519 公钥是否存在,不存在则生成
if [ ! -f "$LOCAL_SSH_PUBLIC_KEY" ]; then
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
fi
# 使用 while read 循环读取服务器配置
while IFS= read -r line; do
# 跳过空行
[ -z "$line" ] && continue
# 解析服务器信息(IP|端口|用户|密码)
ip=$(echo "$line" | awk -F '|' '{print $1}')
port=$(echo "$line" | awk -F '|' '{print $2}')
user=$(echo "$line" | awk -F '|' '{print $3}')
password=$(echo "$line" | awk -F '|' '{print $4}')
# 自动分发公钥到远程服务器(处理含特殊字符的密码)
sshpass -p"$password" ssh-copy-id -p "$port" -o StrictHostKeyChecking=no "$user@$ip"
done < ./sshpass.properties
}
function main(){
keyless_configuration
}
# 执行主函数
main
这里生成的密钥类型是ed25519,没有指定的话默认是rsa。需要注意的是ssh.properties需要放在和脚本路径的同级目录下
sshpass.properties
192.168.1.1|22|root|password
执行完成后,目标服务器上的~/.ssh/authorized_keys就会生成发起免密登录的主机的公钥信息,即自身的id_ed25519.public


脚本执行后,下次ssh可以实现免密登录到远程主机了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...
