网上搜索,可以发现大概有以下情况

1.使用expect交互

2.sshpass

但因为他们都需要安装第三方的软件,不适合我们这样的场景,我们很多时间是绝不允许安装其他软件在客户机上的.

我的场景是在本地有一个程序专门用来处理其他机器传过来的日志文件,其他机器之前使用nfs服务挂载本地的目录到本地,然后再复制过来.

现在不使用上述方法,我想到的方法如下:

1.使用curl命令来上传文件,暂时没有测试能否配合hdfs webhdfs 来完成

2.在本地机创建一个低权限的用户,然后把公共复制文件的目录权限给它一个写权限,然后生成ssh密钥.

3.在收集日志的机器中,把上述生成的私钥配置成变量,然后收集完日志后,把它生成到一个临时文件,

一定把这个文件的权限定为600,然后scp -i privatekey.file  file user@machine:/path

即可完成数据的传送.

根据我原来的设计,主程序会主动发现生成的新文件,然后通知工作线程去处理.

但它一开始会忽略以.开头的文件,其实linux系统本身也把以.开头的文件默认为隐藏文件.

我的示例文件如下,先复制过去的时候生成一个.开头的文件,然后通过ssh命令修改文件不为开头的,为了显示效果,我没有使用mv,使用了cp.

#!/bin/bash

basedir=$(cd `dirname $0`;pwd)
logfile=$basedir/test.txt echo "I am tester write something" >$logfile cat <<EOF >$basedir/aops.pf
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA3At/btU0vMsPoIlvn4KcPFnVxInTib5BQ01mqcfiL7S8gyNt
VMFIcjpI6lbEPUoVKPKVghXrdc+/oCVopci9VbEevnzon3NyMGcuwPAxakmnsNiM
+kVDbwjAus7bmpTUBDH5LAAWCPH//1OB5cEAo3QUrg79A5cAfGyAreBCBhlphnDb
27nTyK7IXaC1e6R8qN28KZ9L77Ew+xUbBKh6TeCn55WsR4pXAfq0meK1r4L0cHoy
IhS0DmnTRm6dF31VNAUyLhazqqPsKksDhMd2Wi1tWOIT2xjJACFz6rn3g9jH4BDZ
UIYzpvet8G085fSmxD4b1zAYyfGWTQnpCUYv5wIBIwKCAQEAilBeurHmoo5EVkfC
gYVMQzEnSFaiOVMEc3J7C6I2ZyEmCUl37CG4glCFmpzwYQn+rAYyF0D6Z09igeug
3TxZwNW7ja2ZiMw5Jb0zVLQ8UXAgQ0ZJ/GYNITizqJ9INUebNdZE2dQrG5DMzGBg
R0YdqJIboJu0+vEzgWjF6aLnrA7OR49Gg8vXnfBhCl3wnhhPcbVwTMy/JR0fYMG2
XXCMnPEowBC3F570OxxrjfKOAukqjveUWbel7uYSFWmePDO4C0EkpmeYvgvpmI/m
lQ6sP3yHZKrtmKk/93yxImzj6u3puJhO08eXo/r7815l6kQK2qho+cdIGjsYi83Z
/Rsd+wKBgQD7+eU1oyHEJ/vo94ry1a+aVtoakC9kDE9As776RyLHalYIZfOgDCx8
y1L3F8n42aQpJFAj+7wYfIquk6K3LgFBCPGz7JetjG4x9eE35XsnTkGcNo2QBNtw
UUoS4WNFfuUdtNasWTueFR9relf90bBtLZR0AN+H3jhekWBGprPw0wKBgQDfjxBw
OF9nJW6iG2kJqnEeHR0pH0Fx+crhRK2V4wzTL63erSpdT/g+ZEBYN4s3/8jwUXGi
I0ATlc42eXVS5sy1MHGsrSAHe3/d2Pk54LT3Mo5uGXMhHY0tGXm7mGOkg5BwhY2v
jxiv9bGxoXNuZWOcryld69lYZObWgCf2IVt4HQKBgQCsyJ0sGBcna9/wNLcM6kyH
Fvv09SfPk2mLc/Crnn4/mV+QuvAzO4w4UOhu672x9FNPaVuGY3mqZAdTI2hDGDtf
y55sv33zWPsa8b8Bwe4MUuspSfqr5hLQrMUUQse6oCgUXr8XGJ3ovgbqnQkjE3Gp
8157blAipwIU9fjf/UgwGwKBgAzGWLX0l7zAT3b6QIQ1oBBZb2FvgBUkN3qWNc4M
+WsnS8OU3dlySLMbq+fIqN6g5ukpObF+W27VXD2gilyCN5VTObIYhXzFOoG0oIb2
5cT7kxw79/NDhGj6JDaa/mEsFuHbvvQWzjXwyFNLDekNG6KNqpenE7vogjgklJG4
w2XzAoGAOOEStVlsqR7mDF2nIeiRZQP00i/Qj4uoI5/7jkwwj95Oz/hbquF7Rcpz
JIlWBx5qBAxkax4pYIegmErEXTPG5BL8ajLMEDwyaKhzs7shxMOriYqBFHfNQnK/
ii2hq941g4wZkeRRrMUQIdZXkvCv+IqqNI9x9NQTg7TAFBoUsCM=
-----END RSA PRIVATE KEY-----
EOF chmod 600 $basedir/aops.pf scp -i $basedir/aops.pf $basedir/test.txt aops@192.168.162.136:/home/aops/test/.test.txt
ssh -i $basedir/aops.pf aops@192.168.162.136 "cp /home/aops/test/.test.txt /home/aops/test/test.txt" rm -f $basedir/test.txt rm -f aops.pf

scp无密码访问scp -i的更多相关文章

  1. linux ssh scp无密码登录

    一. 应用场景 假如你Linux Client是客户端, Server为服务器,用户名为user.现在要配置从Client到Server的无密码SSH登录或者无密码的scp拷贝. 例如客户端Clien ...

  2. [linux] scp无密码拷贝

    源服务器为s,ip为111.111.111.112. 目标服务器为d, ip为111.111.111.111 1>在源服务器新建用户 test_s, useradd test_s -g user ...

  3. ssh key scp命令 scp无密码传输

    ssh ~/.ssh/目录下通常有个文件 [root@user .ssh]# ll 总用量 16 -rw-------. 1 root root 552 11月 16 02:48 authorized ...

  4. Linux服务器SSH无密码访问

    1.编辑Hosts文件: [root@yqtrack-elk01 /]# vim /etc/hosts

  5. SSH 无密码访问其它机器 和 Windows 上 putty 无密码访问 Linux 机器

    1. 从一台 Linux 机器(ubuntu1)上无密码访问其它机器(ubuntu2) (1)登录 ubuntu1 并切换到用户比如 s1 (2)运行 ssh-keygen -t rsa (3)运行c ...

  6. 实现liunx之间无密码访问——ssh密匙

    环境描述 两台linux服务器 172.16.1.22[client],172.16.1.33[server],想要实现client服务器ssh无密码访问server服务器. 使用技术 linux 的 ...

  7. ssh无密码访问设置(ssh-keygen 的详解)

    [原文链接]http://blog.csdn.net/wh_19910525/article/details/7433164 为了让两个linux机器之间使用ssh不需要用户名和密码.所以采用了数字签 ...

  8. Linux配置本地无密码访问

    本机配置无密码访问基本操作步骤: 1.ssh-keygen (效果同ssh-keygen -t rsa 一样,也可以ssh-keygen -t dsa) 2.ssh-copy-id -i ~/.ssh ...

  9. 【转】linux之cp/scp命令+scp命令详解

    linux之cp/scp命令+scp命令详解   名称:cp 使用权限:所有使用者 使用方式: cp [options] source dest cp [options] source... dire ...

随机推荐

  1. Java 执行linux scp 远程获取文件和上传

      需要的jar包:ganymed-ssh2-build210.jar import java.io.ByteArrayOutputStream;import java.io.File;import ...

  2. 数据库已有时间索引,想再添加ID索引

    将时间索引的代码复制进去后,将编辑框的变量改为m_QueryID. 准备先以时间索引查找出大概数据,再直接使用ID索引精确查找. 于是想直接精确查ID为105的数据信息. 出现错误: 发现错误原因是忘 ...

  3. radio 标签状态改变时 触发事件

    <html> <head> <script src="jquery1.7.2.js"></script> </head> ...

  4. Numpy库解析

    python中的axis 其实问题理解axis有问题,df.mean其实是在每一行上取所有列的均值,而不是保留每一列的均值.也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列 ...

  5. ios开发之--键盘的监听

    监听键盘的弹出,让整个页面向上移动,比较简单,仅做记录使用: 代码如下: // 监听键盘 [[NSNotificationCenter defaultCenter] addObserver:self ...

  6. Linux 文件夹含义(转)

    1./bin :获得最小的系统可操作性所需要的命令 2./boot :内核和加载内核所需的文件 3./dev :终端.磁盘.调制解调器等的设备项 4./etc :关键的启动文件和配置文件 5./hom ...

  7. Spring学习笔记--使用注解装配

    使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的 ...

  8. Redesign Your App for iOS 7 之 页面布局

    Redesign Your App for iOS 7 之 页面布局 http://www.vinqon.com/codeblog/?detail/11109

  9. Kafka+SpringMVC+Maven应用示例

    本文借助主流SpringMVC框架向大家介绍如何在具体应用中简单快捷的使用kafka.kafka.maven以及SpringMVC在现在的企业级应用中都占据着非常重要的地位,所以本文将三者结合起来也可 ...

  10. Java中的常用方法

    Java中的常用方法 第一章 字符串 1.获取字符串的长度:length() 2.判断字符串的前缀或后缀与已知字符串是否相同    前缀 startsWith(String s).后缀 endsWit ...