要同时指定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企服之家,中国第一个企服评测及商务社交产业平台。 |