当前位置: 首页 > article >正文

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

文章目录

  • 生成 SSH 密钥对
  • 将公钥复制到目标服务器
  • 验证免密登录
  • 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    
*********************************只要思想不滑坡,办法总比困难多*********************************

http://www.kler.cn/a/612142.html

相关文章:

  • 【深度学习与实战】2.1、线性回归模型与梯度下降法先导
  • [250324] Kafka 4.0.0 版本发布:告别 ZooKeeper,拥抱 KRaft!| Wine 10.4 发布!
  • Apache Shiro 全面指南:从入门到高级应用
  • 网络安全可以去哪些单位工作
  • Windows 图形显示驱动开发-WDDM 2.7功能-MCDM KM 驱动程序实现指南(三)
  • Anaconda 安装NCL (Linux系统)
  • ArcGIS字段计算器的详细使用案例
  • 机器学习核心评估指标解析:AUC-ROC、RMSE、轮廓系数与PR AUC详解
  • 深度解析 | Android 12系统级禁用SIM卡功能实现与Framework层定制
  • 城电科技 | 光伏植物墙 一款会发电发光自动浇水的植物墙
  • STM32八股【2】-----ARM架构
  • OpenHarmony子系统开发 - init启动引导组件(七)
  • 在Windows docker desktop 中安装Dify
  • Android Studio编译问题
  • 单元测试mock
  • SSE SseEmitter.completeWithError(e) 触发的处理逻辑
  • Android 地区选择器或者其他选择器
  • WHAT - 程序员英语之美式发音学习系列(二)
  • springboot使用阿里限流框架-sentinel
  • C++———— Vector