主动批量实现linux机器ssh免密shell脚本

打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

要同时指定SSH端口和暗码来实现非交互式地使用ssh-copy-id,可以使用sshpass来实现。sshpass是一个用于通过非交互方式输入暗码的工具。下面是一个示例脚本,它使用sshpass、ssh-copy-id以及指定的端口号来实现这一目的:
  1. 1 #!/bin/bash
  2. 2
  3. 3 # 检查是否提供了目标主机列表文件
  4. 4 if [ $# -eq 0 ]; then
  5. 5     echo "用法: $0 <目标主机列表文件> <SSH端口号> <密码>"
  6. 6     exit 1
  7. 7 fi
  8. 8
  9. 9 # 目标主机列表文件
  10. 10 host_list_file="$1"
  11. 11
  12. 12 # 检查文件是否存在
  13. 13 if [ ! -f "$host_list_file" ]; then
  14. 14     echo "错误: 文件 '$host_list_file' 不存在"
  15. 15     exit 1
  16. 16 fi
  17. 17
  18. 18 # SSH端口号
  19. 19 ssh_port="$2"
  20. 20
  21. 21 # 密码
  22. 22 password="$3"
  23. 23
  24. 24 # 读取目标主机列表文件,一行一个主机
  25. 25 while IFS= read -r host; do
  26. 26     echo "正在处理 $host..."
  27. 27
  28. 28     # 生成SSH密钥对(如果不存在)
  29. 29     if [ ! -f ~/.ssh/id_rsa ]; then
  30. 30         ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
  31. 31     fi
  32. 32
  33. 33     # 使用sshpass和ssh-copy-id将公钥拷贝到目标主机上
  34. 34     sshpass -p "$password" ssh-copy-id -i ~/.ssh/id_rsa.pub "-p $ssh_port" "$host"
  35. 35
  36. 36     # 检查结果并输出
  37. 37     if [ $? -eq 0 ]; then
  38. 38         echo "成功将公钥拷贝到 $host"
  39. 39     else
  40. 40         echo "无法将公钥拷贝到 $host,请手动处理"
  41. 41     fi
  42. 42 done < "$host_list_file"
复制代码
 
请注意,此脚本假定你已经生成了SSH密钥对(如果没有,请先使用ssh-keygen命令生成)。然后,你可以将脚本保存为一个文件(好比ssh_setup.sh),给予执行权限:
bashCopy codechmod +x ssh_setup.sh 然后,运行脚本并传递目的主机列表文件的路径、SSH端口号和暗码作为参数:
bashCopy code./ssh_setup.sh host_list.txt 2222 YourPassword 这样脚本会将公钥拷贝到每个目的主机上,并且在这个过程中使用指定的SSH端口和暗码。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表