文章目录
- 生成 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/nullif [ $? -ne 0 ]; then# 如果目标文件不存在,使用 scp 复制文件scp "$source_item" $target_item < /dev/nullecho "Copied $source_item to $target_item"elseecho "File $target_item already exists, skipping."fielif [ -d "$source_item" ]; then# 如果是目录,在目标服务器上创建对应目录ssh $target_server "mkdir -p $pure_target_item" < /dev/nullecho "Ensured directory $target_item exists"# 递归处理目录下的子项for sub_item in "$source_item"/*; doif [ -e "$sub_item" ]; thenrecursive_copy "$sub_item"fidonefi
}# 开始递归处理源目录
for item in "$source_dir"/*; doif [ -e "$item" ]; thenrecursive_copy "$item"fi
done