开发者社区> 技术小胖子> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

ssh信任与scp自动传输

简介:
+关注继续查看

由于公司有了备份的需要,需要使用scp来自动的传输,所以我根据网上的很多资料研究了很久,最后写了一份满足我公司需要的scp自动传输文档,希望对大家有帮助。

环境:

发行版本redhat5.4 X64位

为了大家看着方便,我把主机名给写出来
service:172.16.6.4        (nagios)
client:172.16.6.2          (savecenter)
1、服务端生产ssh密钥
 

  1. [root@nagios .ssh]# ssh-keygen (所有选项一直回车即可)  
  2. Generating public/private rsa key pair.  
  3. Enter file in which to save the key (/root/.ssh/id_rsa):   
  4. Enter passphrase (empty for no passphrase):   
  5. Enter same passphrase again:   
  6. Your identification has been saved in /root/.ssh/id_rsa.  
  7. Your public key has been saved in /root/.ssh/id_rsa.pub.  
  8. The key fingerprint is:  
  9. 9a:b4:90:fd:86:7c:c9:88:b9:f0:f5:97:e6:98:2d:de root@nagios  

可以查看是否有id_rsa(私钥)与id_rsa.pub(公钥)文件


  1. [root@nagios tmp]# cd /root/.ssh  
  2. [root@nagios .ssh]# ll  
  3. total 12  
  4. -rw------- 1 root root 1675 Jan 31 13:21 id_rsa  
  5. -rw-r--r-- 1 root root  393 Jan 31 13:21 id_rsa.pub  
  6. -rw-r--r-- 1 root root 1399 Jan 27 14:01 known_hosts  
2、从服务端复制密钥到客户端

  1. [root@nagios .ssh]# ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.6.2
  2. 0
  3. root@172.16.6.2's password: (输入客户端的root密码)
  4. Now try logging into the machine, with "ssh '172.16.6.2'", and check in:
  5. .ssh/authorized_keys (可以在客户端的/root/.ssh/里查看是否有authorized_keys 此文件,如果有就正常成功)
  6. to make sure we haven't added extra keys that you weren't expecting.

3、自动传输脚本(可以自己随便命名,我使用的是scp.sh)

以下是脚本:

  1. #! /bin/sh  
  2.  
  3. while getopts f: OPT; do  
  4. case $OPT in  
  5. f|+f)  
  6. files="$OPTARG $files" 
  7. ;;  
  8. *)  
  9. echo "usage: `basename $0` [-f hostfile] <from> <to>"  
  10. exit 2  
  11. esac  
  12. done  
  13.  
  14. shift `expr $OPTIND - 1`  
  15.  
  16. if [ "" = "$files" ] ;then  
  17. echo "usage: `basename $0` [-f hostfile] <from> <to>"  
  18. exit  
  19. fi  
  20.  
  21. for file in $files  
  22. do  
  23. if [ ! -f "$file" ] ;then  
  24. echo "no hostlist file:$file"  
  25. exit  
  26. fi  
  27. hosts="$hosts `cat $file`" 
  28. done  
  29.  
  30. for host in $hosts; do  
  31. echo "do $host"  
  32. scp -r $1 root@$host:$2  
  33. done  

其中第32行(scp -r $1 root@$host:$2 )如果不加参数r的话,传输文件夹的时候就会出现not a regular file问题,请记住,并给此脚本764权限(具体权限看你的需要)


  1. [root@nagios .ssh]# chmod 764 scp.sh
4、建立主机列表(client的列表,如果有多个客户端的话,每行是一个)

  1. vim /root/.ssh/hostlist
  2. 172.16.6.2

5、在服务端执行scp.sh脚本,把文件传输到客户端

可以使用
scp.sh -f (主机列表文件) 服务端想要传输的文件 客户端收到的路径

  1. scp.sh -f (主机列表文件) 服务端想要传输的文件 客户端收到的路径
  2. [root@nagios .ssh]# /root/.ssh/scp.sh -f /root/.ssh/hostlist /tmp/test_scp_y_or_n /tmp/
  3. do 172.16.6.2
  4. test_scp_y_or_n 100% 0 0.0KB/s 00:00

其中/root/.ssh/hostlist是主角列表文件

/tmp/test_scp_y_or_n是服务端想要传输的文件

/tmp/客户端收到的路径
然后登陆客户端查看/tmp/是否有test_scp_y_or_n文件即可

  1. [root@savecenter test]# cd /tmp/  
  2. [root@savecenter tmp]# ll  
  3. total 20  
  4. drwxr-xr-x 2 lbs  lbs  4096 Jan 31 13:48 hsperfdata_lbs  
  5. drwx------ 2 root root 4096 Jan 18 12:42 keyring-6jKU3T  
  6. srwxr-xr-x 1 root root    0 Jan 18 12:42 mapping-root  
  7. drwx------ 2 root root 4096 Jan 18 12:42 orbit-root  
  8. drwx------ 2 root root 4096 Jan 18 12:42 ssh-gKLdFn4423  
  9. drwxr-xr-x 2 root root 4096 Jan 31 13:27 test  
  10. -rw-r--r-- 1 root root    0 Jan 31 13:44 test_scp_y_or_n  

 可以看到在客户端里收到了test_scp_y_or_n文件,证明scp信任成功的建立,不同服务器直接的scp传输可以不需要输入密码,如果你想要自动的实现scp传输,那么你在crontab里设置自动传输的时间、服务器传输的文件、客户端接收文件的位置即可,如果想要实现1台服务端传到多台客户端,那么你在hostlist里添加多个客户端的ip即可。

BTW:附件是scp.sh脚本的,rar格式解压即为scp.sh,为了大家方便所以上传。



 本文转自 dl528888 51CTO博客,原文链接:http://blog.51cto.com/dl528888/769519,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载