自动批量实现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),给予执行权限:

bash
chmod +x ssh_setup.sh

然后,运行脚本并传递目标主机列表文件的路径、SSH端口号和密码作为参数:

bash
./ssh_setup.sh host_list.txt 2222 YourPassword

这样脚本会将公钥拷贝到每个目标主机上,并且在这个过程中使用指定的SSH端口和密码。

posted @ 2024-04-30 13:11  IT人生--MarkGuo  阅读(298)  评论(1编辑  收藏  举报