从原始服务器SSH上传到随机服务器

问题描述 投票:0回答:1

我目前有5台服务器,1台上传服务器(ftp.example.com)和4台存储服务器(fs#.example.com)。我目前正在寻找一种将文件从我的上传服务器随机发送到其中一个存储服务器的方法。

上传 file.txt、file2.txt 和 file3.txt 到 ftp.example.com

file.txt -> fs1.example.com

file2.txt -> fs4.example.com

file3.txt -> fs2.example.com

我一直在研究 rsync、rclone 和 scp,但我找不到一个选项,它可以从数组或 .txt 文件等中选择服务器的登录详细信息。我想知道是否有人可以建议一种方法这 ?理想情况下,这将通过一个文本文件来完成,我可以根据容量等使用其他服务器更新或删除服务器。

ubuntu ssh rsync scp
1个回答
0
投票

您需要某种 bash 脚本才能读取文件并从中随机选择存储服务器。不过,为了尽量减少人为干预,我建议为所有服务器设置SSH 密钥,然后在主机上编辑

~/.ssh/config
文件以包含所有服务器的条目。例如:

Host storage_server_1
    HostName fs1.example.com
    User admin
    IdentityFile ~/.ssh/id_rsa.pub

Host storage_server_2
    HostName fs2.example.com
    User john
    IdentityFile ~/.ssh/id_rsa.pub

...

我会在输入文件的每一行上写下每个服务器的“主机”值,而不是主机名。然后,如果您使用的是 bash 4.0,则可以使用类似以下的内容:

storage_server_list=/path/to/storage/server/file.txt

# Read the list of servers into an array (assuming there's one server per line)
readarray -t server_list ${storage_server_list}

num_servers=${#server_list[@]}
random_server_idx=$(( $RANDOM % ${num_servers} ))

# Pick a random server from the array
random_server=${server_list[${random_server_idx}]}

scp some_file ${random_server}

if [ $? -eq 0 ]; then
    echo "scp failed" > /dev/stderr
else
    echo "scp succeeded"
fi
© www.soinside.com 2019 - 2024. All rights reserved.