linux shell脚本实现ssh免密运维的核心是自动化密钥生成、分发、权限设置与服务验证:先创建~/.ssh目录并生成无密码rsa密钥,再用ssh-copy-id或scp+ssh推送公钥,接着配置并重启远程sshd服务,最后校验并修复本地及远程目录和文件权限,最终封装为支持批量添加、测试与清理的可复用脚本。

Linux Shell 脚本实现服务器间 SSH 免密运维,核心是把人工执行的密钥生成、分发、权限设置、服务验证等步骤自动化,让多台服务器之间一键建立信任关系,支撑批量命令、定时同步、无人值守部署等场景。
生成并分发密钥对
脚本需在控制节点(如跳板机或运维主机)上运行,首先检查 ~/.ssh 目录是否存在,若无则创建;接着调用 ssh-keygen -t rsa -b 4096 -N '' -f ~/.ssh/id_rsa 生成无密码私钥(-N '' 表示空 passphrase,确保脚本可非交互执行)。生成后,用 ssh-copy-id 批量推送公钥到目标列表中的每台服务器。若目标机器未预装 ssh-copy-id,可用 scp + ssh 组合实现等效操作:先上传公钥文件,再通过远程 shell 追加到 ~/.ssh/authorized_keys 中。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
统一配置远程主机 SSH 服务
免密登录生效依赖服务端正确启用公钥认证。脚本可通过 ssh user@host 'sudo sed -i "s/^#*PubkeyAuthentication.*/PubkeyAuthentication yes/" /etc/ssh/sshd_config' 启用该选项;同时建议将 PasswordAuthentication no(仅在确认密钥登录稳定后启用)和 AuthorizedKeysFile .ssh/authorized_keys 一并写入。操作完成后,自动触发 ssh user@host 'sudo systemctl restart sshd' 重启服务。注意:部分系统(如 CentOS 7)需额外检查 SELinux 状态,必要时执行 restorecon -Rv ~/.ssh 修复上下文。
校验与权限加固
脚本执行后必须验证关键路径权限是否合规,否则 SSH 守护进程会拒绝读取密钥文件。典型检查项包括:
• 本地 ~/.ssh 目录权限为 700
• 本地私钥 id_rsa 权限为 600
• 远程 ~/.ssh 目录权限为 700
• 远程 authorized_keys 文件权限为 600
脚本中可用 chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_rsa 本地处理,并通过 ssh user@host 'chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys' 远程修正。失败时输出具体错误位置,便于快速定位。
封装成可复用的批量任务
将上述逻辑整合为带菜单或参数的脚本,例如支持传入 IP 列表文件:
• ./ssh_trust.sh --add ip_list.txt:为列表中所有服务器配置免密
• ./ssh_trust.sh --test host1 host2:并发测试连通性与免密状态
• ./ssh_trust.sh --clean user@host:从指定主机 authorized_keys 中移除当前公钥
配合 for 循环与 timeout 命令控制单次连接超时(如 timeout 5 ssh -o ConnectTimeout=5 -o BatchMode=yes user@host exit),避免某台宕机拖慢整体流程。不复杂但容易忽略










