linux scp复制多层级文件夹到另一服务器免密及脚本配置

生成 SSH 密钥对

在本地机器上,使用 ssh-keygen 命令生成 SSH 密钥对。打开终端并执行以下命令:

ssh-keygen -t rsa

按提示连续按回车键,默认会在 ~/.ssh 目录下生成两个文件:id_rsa(私钥)和 id_rsa.pub(公钥)。

将公钥复制到目标服务器

使用 ssh-copy-id 命令将公钥复制到目标服务器:

ssh-copy-id user@host

user:目标服务器账号
host:目标服务器IP
注意:该账号需要有root权限,否则不提权情况下只能复制到该账号的 home 目录下!
执行该命令后,会提示输入目标服务器的密码。输入正确密码后,公钥会被复制到目标服务器的 ~/.ssh/authorized_keys 文件中。

验证免密登录

执行脚本时,不再需要输入密码。

scp 多级文件夹复制脚本

#!/bin/bash

# 源目录
source_dir="/opt/data/model_train/storage/model-version"

# 目标服务器信息
target_server="root@127.0.0.1"
target_dir="/opt/data/model_train/storage/model-version"

# 递归处理源目录下的文件和目录
recursive_copy() {
    local source_item="$1"
    local relative_path="${source_item#$source_dir/}"
    local target_item="$target_server:$target_dir/$relative_path"
    local pure_target_item="${target_item#*:}"

    # 检查源项是文件还是目录
    if [ -f "$source_item" ]; then
        # 如果是文件,检查目标文件是否存在
        ssh $target_server "test -f $pure_target_item" < /dev/null
        if [ $? -ne 0 ]; then
            # 如果目标文件不存在,使用 scp 复制文件
            scp "$source_item" $target_item < /dev/null
            echo "Copied $source_item to $target_item"
        else
            echo "File $target_item already exists, skipping."
        fi
    elif [ -d "$source_item" ]; then
        # 如果是目录,在目标服务器上创建对应目录
        ssh $target_server "mkdir -p $pure_target_item" < /dev/null
        echo "Ensured directory $target_item exists"

        # 递归处理目录下的子项
        for sub_item in "$source_item"/*; do
            if [ -e "$sub_item" ]; then
                recursive_copy "$sub_item"
            fi
        done
    fi
}

# 开始递归处理源目录
for item in "$source_dir"/*; do
    if [ -e "$item" ]; then
        recursive_copy "$item"
    fi
done    
*********************************只要思想不滑坡,办法总比困难多*********************************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值