shell脚本实现服务器免密登录
需求半自动化实现服务器免密登录(需要手动输入密码)知识点解析#生成一个数组,存储服务器的ip,配置几个服务器就写几个 SERVERS(服务器1的地址 服务器2的地址 服务器3的地址)把本机的id_rsa.pub公钥自动追加到远程服务器用户的~/.ssh/authorized_keys文件里。id_rsaSSH 生成的 RSA 算法私钥文件和它配对的公钥文件是id_rsa.pub它们是免密登录的基础私钥id_rsa必须保存在本机相当于你的 “钥匙”绝对不能泄露给别人公钥id_rsa.pub可以分发到远程服务器相当于服务器上的 “锁孔”只有你的私钥能打开它[ ! -f $HOME/.ssh/id_rsa ] ssh-keygen -t rsa -N -f $HOME/.ssh/id_rsassh-copy-id -o StricHostKeyCheckingno $USERserverssh-copy-id把本地的公钥上传到远程服务器的工具会自动写入远程用户的~/.ssh/authorized_keys文件-o StrictHostKeyCheckingno关闭主机密钥检查首次连接服务器时不会弹出 “是否信任主机” 的交互式确认提示避免脚本卡住$USER$server远程服务器的登录信息$USER是用户名这里是 root$server是服务器 IP 地址比如 192.168.88.101显示出来就是root192.168.88.101完整脚本⚠️重要注意事项远程服务器必须开启 SSH 服务且防火墙允许 22 端口。脚本中使用的root用户需要确保远程服务器允许 root 用户 SSH 登录部分服务器默认关闭。# 1. 检查 SSH 服务状态 systemctl status sshd # 2. 如果没开启启动服务 systemctl start sshd # 3. 设置开机自启避免重启后失效 systemctl enable sshdfirewalldCentOS/RHEL 系列默认# 1. 放行 22 端口 firewall-cmd --permanent --add-port22/tcp # 2. 重载防火墙规则让配置生效 firewall-cmd --reload # 3. 验证端口是否放行成功 firewall-cmd --list-portsvim mianmi.sh#!/bin/bash SERVERS(192.168.88.101 192.168.88.102 192.168.88.103) USERroot [ ! -f $HOME/.ssh/id_rsa ] ssh-keygen -t rsa -N -f $HOME/.ssh/id_rsa for server in ${SERVERS[]} do echo 开始配置免密登录 $server ssh-copy-id -o StrictHostKeyCheckingno $USERserver donechmod x mianmi.sh ./mianmi.sh看一下有没有生效ssh root192.168.88.102