zoukankan      html  css  js  c++  java
  • scp无密码访问scp -i

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

    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
    
  • 相关阅读:
    Linux之Ubuntu添加/移除个人软件包存档的源[PPA,Personal Package Archives]
    [C++]Linux之头文件sys/types.h[/usr/include/sys]
    [C++]Linux之文件拷贝在系统调用和C库函数下的效率比较
    Linux之Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)【摘抄】
    [C++]基于Curses库的实时系统监测可视化系统-2017-12-09 15-07-42
    [C++]Linux之虚拟文件系统[/proc]中关于CPU/内存/网络/内核等的一些概要性说明
    [C++]Linux之计算内存利用率与辨析
    [C++]Linux之网络实时检测功能
    [C++]Linux之C编程异常[true未定义解决方案]
    [C++]Linux之读取计算机网络数据[/proc/net/dev]
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/7695758.html
Copyright © 2011-2022 走看看