• ssh、scp的使用,以及shell脚本解决scp需要输入密码的问题


    一、什么是SSH?

    简单说,SSH是一种网络协议,用于计算机之间的加密登录。

    如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。

    最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

    需要指出的是,SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。

    二、最基本的用法

    SSH主要用于远程登录。假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。

    $ ssh user@host
      
    eg:
    ssh james@192.168.1.119

    如果本地用户名与远程用户名一致,登录时可以省略用户名。

    ssh 192.168.1.119

    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

    三、SCP使用

    scp是有Security的文件copy,基于ssh登录。

    操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令。

    scp /home/james/data.txt root@192.168.1.119:/home/james

    然后会提示你输入另外那台192.168.1.119主机的root用户的登录密码,接着就开始copy了。

    如果想反过来操作,把文件从远程主机copy到当前系统,也很简单。

    scp james@192.168.1.119:/home/james/data.txt home/james/data.txt
     
    四、shell脚本解决scp需要输入密码问题
    expect就是用来做交互用的,基本任何交互登录的场合都能使用,但是需要安装expect包
    sudo apt-get install expect

    安装完成之后,书写脚本scp.sh

    #!/usr/bin/expect -f
    set timeout 30
    spawn scp TcrController james@192.168.1.119:/home/james/ws
    expect "*password:"
    send "123456
    "
    expect eof

    注意:expect跟bash类似,使用时要先登录到expect,所以首行要指定使用expect

    在运行脚本时候要expect  file,不能sh file了

    首行指定用来执行该脚本的命令程序,这里是/usr/bin/expect

    上面语句第一句是设定超时时间为30s,spawn是expect的语句,执行命令前都要加这句

    expect "password:"这句意思是交互获取是否返回password:关键字,因为在执行ssh时会返回输入password的提示:james@192.168.1.119's password:

    send就是将密码123456发送过去

    expect eof 子进程已经结束的eof字符,expect脚本也就退出结束

    interact代表执行完留在远程控制台,不加这句执行完后返回本地控制台 

         

  • 相关阅读:
    算法导论第11章 散列表
    Ubuntu14.04上安装Jupyter的方法
    WinSCP连接远程的Ubuntu失败
    K-means和K-means++好的网站
    Ubuntu14.04上安装pip的方法
    算法导论第一章
    微服务架构的特点
    国内maven仓库地址 || 某个pom或者jar找不到的解决方法
    REST or RPC?
    zookeeper安装及环境变量设置
  • 原文地址:https://www.cnblogs.com/wanzaiyimeng/p/6700138.html
Copyright © 2020-2023  润新知