这里分享一下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可以实现免密登录到远程主机了。
© 版权声明
文章版权归作者所有,未经允许请勿转载。