脚本 用 scp 拷贝文件

本文介绍了一种使用 expect 脚本和 rsync 命令实现自动化文件同步与远程部署的方法。通过编写 shell 脚本结合 expect 工具,可以轻松地进行文件的备份、同步及远程服务器的数据更新。

 

#!/usr/bin/expect

set proj_dir /home/jksong/NewsSpark/openid_for_commonid
set tmp_data_dir $proj_dir/data_src/openid_dir
set password yourpassword

spawn scp -r $tmp_data_dir news@10.49.94.67:/data/news/data/commid_stroage_server/original
set timeout 300
for {} {1} {} { 
    expect {
        "*re you sure you want to continue connecting (yes/no)?" {
            send "yes\r" 
        }        
        "*assword:" {
            send "$password\r"
        }        
        "*ermission denied*" {
            break       
        }       
        "*No route to host" {
            break
        }
        "*No such file or directory" {
            break
        }
        timeout {
            break
        }
        eof {
            break
        }
    }
}
interact

exit

 

#!/bin/sh

rsynData()
{
   if [ $# -eq "3" ];then
    src=$1
    dest=$2
    pwd=$3

    expect -c "
        spawn scp -r $src $dest
        expect {
                \"*assword\" {set timeout 300; send \"${pwd}\r\";}
                \"yes/no\" {send \"yes\r\"; exp_continue;}
               }
    expect eof"
   fi
}


rm -rf /data/kb_user_pindao/$1
rsynData jksong@192.168.0.1:/home/jksongNewsHadoop/kb_user_pindao/$1  /data/kb_user_pindao/ password

for p in `ls  "/data/kb_user_pindao/$1"`
do
    /usr/local/php/bin/php /data/inews_server_cms/server/cache_tools/channel_recomm/importInterestChannelToRedis.php /data/kb_user_pindao/$1/$p
done

 

<think>嗯,用户这次的问题是关于在CentOS系统上配置SCP免密文件拷贝的。从问题描述看,用户应该是个系统管理员或者开发者,需要在不同服务器之间高效传输文件。ta明确提到了“CentOS”和“免密码”,说明需求很具体。 用户可能正在搭建分布式环境,或者需要频繁在多台机器间同步数据。手动输入密码显然效率太低,还可能影响自动化脚本的运行。ta的深层需求其实是实现服务器间的无缝协作,减少人工干预。 我注意到用户提供了详细的参考引用,包括建立SSH信任、密钥生成、公钥分发等步骤。这些引用质量不错,特别是引用[3]的操作步骤非常清晰。不过引用[4]关于双向配置的部分可能有点多余,因为用户只问了单向拷贝。 在整理方案时,我需要特别注意: 1. 密钥类型的选择:现在推荐用更安全的ed25519,但传统rsa兼容性更好 2. 权限设置:.ssh目录700和authorized_keys文件600这两个权限必须严格 3. 防火墙问题:很多用户会忽略223端口是否开放 4. SELinux的影响:特别是CentOS 7以上版本 用户可能遇到的坑包括: - 如果已有密钥却重新生成会覆盖原有密钥 - 公钥文件末尾缺少换行导致验证失败 - 目标服务器.ssh目录属主不对 我应该把验证步骤写得详细些,比如用ssh -v调试连接。还可以补充个常见问题排查表,这样用户遇到问题能快速定位。对了,安全方面要提醒用户禁止root登录,这是很多教程忽略的。 相关问题的设计要围绕扩展场景: 1. 多服务器配置是自然延伸 2. 端口问题实际中经常遇到 3. 安全加固是必要提醒 4. 自动化脚本则是高级需求 最后决定用分步式说明,每步包含操作命令和原理注释。验证环节特别加入“首次连接需确认指纹”的提示,避免用户卡在这步。防火墙部分单独强调,因为云服务器经常默认关闭端口。</think>以下是在CentOS系统中配置SCP免密文件拷贝的详细步骤,基于SSH密钥认证实现: ### 步骤1:生成密钥对(源服务器操作) ```bash ssh-keygen -t rsa -b 4096 ``` * 连续按3次回车(默认路径`~/.ssh/id_rsa`,不设置密码) * 生成两个文件: `id_rsa`(私钥,权限必须为600) `id_rsa.pub`(公钥,需传输到目标服务器) ### 步骤2:拷贝公钥到目标服务器 #### 方法1:使用`ssh-copy-id`(推荐) ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub username@target_ip ``` * 首次需输入目标服务器密码 * 自动将公钥追加到目标服务器的`~/.ssh/authorized_keys` #### 方法2:手动复制(无`ssh-copy-id`时) ```bash # 在源服务器执行 scp ~/.ssh/id_rsa.pub username@target_ip:~/tmp.pub # 登录目标服务器执行 mkdir -p ~/.ssh cat ~/tmp.pub >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys rm ~/tmp.pub ``` ### 步骤3:验证免密登录 ```bash ssh username@target_ip ``` * 若直接登录成功,表明密钥配置正确 ### 步骤4:执行免密SCP传输 ```bash # 从本地复制到远程 scp /local/file.txt username@target_ip:/remote/path/ # 从远程复制到本地 scp username@target_ip:/remote/file.txt /local/path/ ``` 此时无需输入密码即可完成传输[^3]。 --- ### 关键配置检查 | **项目** | **目标服务器要求** | |-------------------|--------------------------------------| | 文件权限 | `.ssh`目录700, `authorized_keys`文件600 | | SELinux状态 | 若启用可能需`restorecon -Rv ~/.ssh` | | SSH服务配置 | 确认`/etc/ssh/sshd_config`包含: | | | `PubkeyAuthentication yes` | | | `AuthorizedKeysFile .ssh/authorized_keys` | --- ### 常见问题排查 1. **权限错误** ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys ``` 2. **SELinux阻止** ```bash restorecon -Rv ~/.ssh # 修复上下文 setenforce 0 # 临时禁用SELinux(测试用) ``` 3. **SSH服务未重启** ```bash sudo systemctl restart sshd ``` 4. **防火墙拦截** ```bash sudo firewall-cmd --permanent --add-service=ssh sudo firewall-cmd --reload ``` > 安全提示:生产环境建议使用`ed25519`密钥(`ssh-keygen -t ed25519`)并禁用密码登录[^4]。 --- ### 相关问题 1. 如何配置多台服务器之间的双向免密SCP传输? 2. SCP传输速度慢如何优化? 3. 非默认SSH端口(非22)如何实现免密SCP? 4. 如何通过SCP实现目录的实时同步? 5. 如何限制免密登录用户的执行权限? [^1]: 通过SSH密钥认证实现自动化文件传输 [^3]: 公钥分发与权限配置是免密操作的核心 [^4]: 密钥类型选择与安全策略增强
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值