灌篮少年 发表于 2024-5-18 20:51:47

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

要同时指定SSH端口和暗码来实现非交互式地使用ssh-copy-id,可以使用sshpass来实现。sshpass是一个用于通过非交互方式输入暗码的工具。下面是一个示例脚本,它使用sshpass、ssh-copy-id以及指定的端口号来实现这一目的:
1 #!/bin/bash
2
3 # 检查是否提供了目标主机列表文件
4 if [ $# -eq 0 ]; then
5   echo "用法: $0 <目标主机列表文件> <SSH端口号> <密码>"
6   exit 1
7 fi
8
9 # 目标主机列表文件
10 host_list_file="$1"
11
12 # 检查文件是否存在
13 if [ ! -f "$host_list_file" ]; then
14   echo "错误: 文件 '$host_list_file' 不存在"
15   exit 1
16 fi
17
18 # SSH端口号
19 ssh_port="$2"
20
21 # 密码
22 password="$3"
23
24 # 读取目标主机列表文件,一行一个主机
25 while IFS= read -r host; do
26   echo "正在处理 $host..."
27
28   # 生成SSH密钥对(如果不存在)
29   if [ ! -f ~/.ssh/id_rsa ]; then
30         ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
31   fi
32
33   # 使用sshpass和ssh-copy-id将公钥拷贝到目标主机上
34   sshpass -p "$password" ssh-copy-id -i ~/.ssh/id_rsa.pub "-p $ssh_port" "$host"
35
36   # 检查结果并输出
37   if [ $? -eq 0 ]; then
38         echo "成功将公钥拷贝到 $host"
39   else
40         echo "无法将公钥拷贝到 $host,请手动处理"
41   fi
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企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 主动批量实现linux机器ssh免密shell脚本