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

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. TCP/IP 在 Windows 下的实现

    Windows 实现TCP/IP 协议也是建立在上一篇博客的OSI 基础之上的. 用户态是由ws2_32.dll 和一些其他服务提供者的 dll 共同实现,当中ws2_32.dll 是一个框架.能够容 ...

  2. C语言switch语句

    C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况.例如,输入一个整数,输出该整数对应的星期几的英 ...

  3. Ubuntu16.04最快捷搭建小型局域网Git服务器

    导读 使用linux操作系统,不得不提Git版本管理器,这个Linus花了两周时间开发的分布式版本管理器(这就是大神,先膜了个拜...),毫无疑问,Git版本管理器与linux系统有着与生俱来的同一血 ...

  4. 网络代理-Firefox在shadow socks下面的使用

    好久不写了,嘿嘿,中午好哈大家,给大家介绍下firefox下配置shadowsocks使用代理. 第一步:先下载一个firefox. 第二步: 打开设置 找到组件选项. 3.第三步: 4.第四步: 5 ...

  5. jquery对象转dom对象

    jq取兄弟级的上移个元素 jquery对象: var a = $(this).prev("a"); console.log(a); 输出: 转dom对象: var a = $(th ...

  6. 深入理解ByteBuffer

    ByteBuffer类是在Java NIO中常常使用的一个缓冲区类,使用它可以进行高效的IO操作,但是,如果对常用方法的理解有错误,那么就会出现意想不到的bug. ByteBuffer类的常用方法 先 ...

  7. SQL中的循环获取根节点

    方法一: DECLARE @employeeid INT; set @employeeid = 8115; DECLARE @id INT; DECLARE @pid int; DECLARE @le ...

  8. POJ3150—Cellular Automaton(循环矩阵)

    题目链接:http://poj.org/problem?id=3150 题目意思:有n个数围成一个环,现在有一种变换,将所有距离第i(1<=i<=n)个数小于等于d的数加起来,对m取余,现 ...

  9. 小程序 Page is not constructed because it is not found.

    如下错误一般发生在点击事件切换页面的时候 解决方式: 在需要切换到的那个页面的js文件中添加Page({ })方法即可解决此问题. Tis:在js文件中输入Page回车,可自动添加Page方法,包括里 ...

  10. 多线程入门-第四章-线程的调度与控制之sleep

    /* sleep,阻塞当前线程,腾出CPU,让给其他线程 单位是毫秒 静态方法 */ public class ThreadTest04 { public static void main(Strin ...