我正在尝试为数百台(500 多台)云服务器创建一个备份服务器,这些服务器都使用 iptables,将 ssh 连接限制到我们公司的 IP。
所有备份都将发送到一个中央云“服务器”,主机位于不同的地区或数据中心,并且通过登录每个主机来运行scp
或ssh_copy_id
类似操作将是一场繁琐的噩梦。
我可以导出密钥并将其用于从本地服务器到所有服务器的“安装类型脚本”,然后复制 ssh id 以进行无密码登录并安装 cron + 脚本以进行自动备份吗?
答案1
我会使用 puppet,完美地向多台机器添加文件、密钥或设置。https://puppet.com/solutions/cloud-management
答案2
pssh 包中的 parallel-scp 和 parallel-ssh 命令也可能是更简单的解决方案。您只需将主机 ip 保存在文件中以作为主机参数传递即可。第一次 parallel-scp 会将公钥复制到每个服务器中的 ~/.ssh/authorized_keys,在后续运行中,您可以通过 parallel-ssh 访问服务器。
答案3
我发现最简单的方法是使用带有 sshpass 和受限用户的脚本作为权宜之计,同时我们评估“自动部署”解决方案。脚本如下谢谢,节日快乐
#!/bin/bash
now=$(date +"%Y-%m-%d")
PATH=/usr/sbin:/sbin:/usr/bin:/bin
ServerIP=`ifconfig | grep -A1 "Link encap:Ethernet" | grep -v "Link encap:Ethernet" | cut -d":" -f2 | cut -d" " -f1 | egrep '([1-2]?[0-9]{0,2}\.){3,3}[1-2]?[0-9]{0,2}'`
echo "ServerIP is:$ServerIP" > /dev/null
if ! rpm -qa | grep -qw sshpass; then
yum -y install sshpass rsync
elif [ ! -d "/tmp/backup" ] ; then
mkdir -p /tmp/backup && chmod -R 777 /tmp/backup
else
cp -u /etc/sysconfig/iptables /tmp/backup
cp -Ru /var/..../custom/ /tmp/backup
cp -Ru /var/..../somestuff/ /tmp/backup
mysql -uroot -pmysqlpassword < /root/backup.sql
fi
zip -r /tmp/backup/`hostname`_"$ServerIP"_"$now"_Backup.zip /tmp/backup/
rsync -avzh -e "sshpass -p verylongpassword ssh" /tmp/backup/*Backup.zip user@ServerIP:/backups/
rm /tmp/backup/*