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,如需转载请自行联系原作者

相关文章
|
7月前
|
安全 Linux 网络安全
|
Ubuntu Linux 网络安全
通过 SSH 在远程和本地系统之间传输文件的 4 种方法
通过 SSH 在远程和本地系统之间传输文件的 4 种方法
4592 0
通过 SSH 在远程和本地系统之间传输文件的 4 种方法
|
2月前
|
Ubuntu Linux 网络安全
MobaXterm的是有用方法---集串口,SSH远程登录和FTP传输三合一工具
MobaXterm的是有用方法---集串口,SSH远程登录和FTP传输三合一工具
67 3
|
4月前
|
缓存 网络协议 数据可视化
可视化文件编辑与SSH传输神器WinSCP如何公网远程访问本地服务器
可视化文件编辑与SSH传输神器WinSCP如何公网远程访问本地服务器
|
5月前
|
Ubuntu 安全 网络协议
如何在 Ubuntu 上启用 SSH,安全地远程管理和传输数据
如何在 Ubuntu 上启用 SSH,安全地远程管理和传输数据
203 0
如何在 Ubuntu 上启用 SSH,安全地远程管理和传输数据
|
网络安全 Windows
ssh和scp连接window服务器
ssh和scp连接window服务器
315 0
|
网络协议 Shell Linux
ssh免密登录服务器和scp的使用
ssh免密登录服务器和scp的使用
275 0
|
网络安全
操作系统:如何通过 ssh 给远程服务器传输文件
通过 ssh 的方式给远程服务器传输文件的命令为:scp -P port file_name user@ip:/dir_name
219 0
|
网络安全
04-rsync传输与ssh传输的区别
rsync传输与ssh传输的区别
150 0
04-rsync传输与ssh传输的区别
|
SQL 网络安全
搬瓦工&极路由(ssh,scp最佳实战案例)
关于搬瓦工 搬瓦工 最近往搬瓦工主机部署项目,而搬瓦工的默认登录端口号并非22号(我的是28208) 正确登录方式(以28208端口为例) ssh -p 28208 用户名@主机名 当要把本地的文件通过scp发送到远程服务器时,需要把-p改为-P才能成功 正确的scp(远程拷贝)方式(fangyuangxiaozhang.
1417 0