1 SSH登陆原理

  SSH,Secure Shell,是一套协议标准,可以用来实现两台机器之间的安全登陆以及安全的数据传送,其保证数据安全的原理是非对称加密。
  传统的对称加密方式使用的是一套密钥,数据的加密和解密用的是这一套密钥,所有的客户端和服务端都得存储这套密钥,泄漏风险很高,并且一旦泄漏,如果对数据拦截,就可通过该密钥解密获取数据内容,因此数据的安全性得不到保证。
  非对称加密方式解决的就是这个问题,它包含两套密钥-公钥以及私钥,其中,公钥用于加密,私钥用于解密,并且通过公钥计算不出私钥,因此私钥谨慎保存在服务端,公钥可随便传递,即使公钥泄漏也能保证数据安全。
  其中,客户端与服务端都各自拥有一套公钥和私钥,但必须有对方的公钥才能对数据加密后被对方所感知,这个过程是在连接时完成的,过程如下所示:
  (1)客户端发起连接请求
  (2)服务端返回自己的公钥以及会话ID   -->  客户端得到服务端的公钥
  (3)客户端生成密钥对
  (4)客户端用自己的公钥异或会话ID,计算出一个值,并用服务端的公钥进行加密
  (5)客户端发送加密后的值到服务端,服务端用私钥解密
  (6)服务端用解密后的值异或会话ID,计算出客户端的公钥 ---> 服务端得到客户端的公钥
  (7)至此连接建立,双方都各自持有三个密钥,分别为自己的一对公私钥以及对方的私钥,之后所有的通讯都会被加密。
 

  需要注意的是,当两台机器第一次使用SSH连接时,当服务端返回自己的公钥的时候,客户端会有一条提示信息,大意是无法验证对方是否可信,并给出对方公钥的MD5编码值,问是否确定要建立连接。如下图所示:
 

 
  原因:尽管SSH传输过程很安全,但首次建立链接时并没有办法知道发来的公钥是否真的来自自己请求的服务器,如果有人在客户端请求服务器后拦截了请求,并返回自己的公钥冒充服务器,这时候如果链接建立,那么所有的数据都能被攻击者用自己的私钥解密,这就是所谓的中间人攻击。
 
2 常用认证方法
 
  常用的认证方法包括账号密码登陆和公钥登陆两种。无论是哪一种都需要预先在服务端进行配置。
  2.1 账号密码登陆  
   特征:客户端通过账号密码进行登陆。但是只有当账号密码存在于服务端中才能验证通过。
   连接建立过程如下:
   (1)服务端收到登陆请求后,首先互换公钥,如上所示。
   (2)客户端用服务端的公钥加密账号密码并发送
   (3)服务端用私钥解密后得到账号密码,然后进行验证
   (4)服务端用客户端的公钥加密验证结果后返回
   (5)客户端用自己的私钥解密后得到验证结果
  2.2 公钥登陆
   特征:客户端通过root账号进行登陆则自动启用公钥登陆,无需输入密码,但是只有当本身的公钥存在于服务端的authorized_keys文件中才能验证通过。
   方法:将要免密登陆机器的公钥添加到服务端的authorized_keys文件中即可,其中,服务端该文件目录固定为/root/.ssh/authorized_keys。
   连接建立过程如下:
   (1)客户端用户必须手动的将自己的公钥添加到服务器一个名叫authorized_keys的文件里。(该文件保存了所有可以远程登陆的机器的公钥)
   (2)客户端发起登陆请求,并且发送一个自己公钥的指纹(具有唯一性,但不是公钥)
   (3)服务端根据指纹检测此公钥是否保存在authorized_keys中
   (4)若存在,则服务端生成一段随机字符串,然后用客户端公钥加密后返回
   (5)客户端收到后用自己的私钥解密,再利用服务端公钥加密后返回
   (6)服务端收到后用自己的私钥解密,如果为同一字符串则验证通过建立连接。

2 远程登陆

ssh  username@ip  -p port

3 远程数据CP

3.1 基本命令格式

   命令:scp [options] [原路径] [目标路径]
   用法:将原路径中的内容cp到目标路径中。
 3.2 options说明
   如果是复制文件,则无需指定options参数,如果是复制目录,则为-r
   如果需要指定端口,则需要使用-P参数,格式为:-P port

常用命令形式:

   从远程机器cp数据到本地机器
      scp [options] 客户端名@IP:远程文件目录 本地目录
   将本地机器的内容cp到远程机器
      scp [options] 本地目录 客户端名@IP:远程文件目录

远程登陆与数据CP的更多相关文章

  1. mysql开启远程登陆(修改数据表和授权两种方法)

    一.确认防火墙没有阻止3306端口(一般服务器默认会屏蔽掉) windows防火墙例外设置方法 控制面板(右上角选择查看方式为大图标)---防火墙---高级设置---高级设置---出站规则---最右边 ...

  2. linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法

    linux系统新建的用户用ssh远程登陆显示-bash-4.1$,不显示用户名路径 网络上好多解决办法,大多是新建.bash_profile文件然后输入XXXXX....然而并没有什么用没有用.... ...

  3. [20150513]Linux远程登陆管理以及Vim的学习

    Linux远程登陆管理以及Vim的学习 实现Linux远程管理 所需工具Xshell,Xshell是一个用于MS Windows平台的强大的SSH,TELNET,和RLOGIN终端仿真软件.它使得用户 ...

  4. 一起来学linux:SSH远程登陆

    p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 在最早的远程连接技术,主要是telnet和RSH为主.缺点也很明显,就是明文传输.在 ...

  5. Linux入门(1)_VMware和系统分区和系统安装和远程登陆管理

    1 VMware的安装和使用 注意有 快照 和 克隆 的功能. 快照相当于建立一个 系统还原点, 可以随时恢复到原来状态. 克隆功能可以复制一个和当前一样的系统,并可以选择链接安装,只使用很少的空间就 ...

  6. SSH免密远程登陆及详解

    SSH(安全外壳协议):为建立在应用层和传输层基础上的安全协议,ssh是目前较为可靠,专门为远程登陆,会话和其他网络服务提供安全 协议.利用ssh协议可以有效的防止远程管理过程中的信息泄露问题,传统的 ...

  7. 在远程登陆的主机上通过命令行源码编译安装 GNU M4、autoconf、automake 等程序

    由于实验需要,最近获得了一个实验室服务器的账号,平常主要通过 ssh 进行远程登陆进行实验.一方面,远程登录的机器只提供终端界面,一般只通过命令行进行任务操作:另一方面,由于是多人共享服务器,故而个人 ...

  8. linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法,ssh-bash-4.1

    linux系统新建的用户用ssh远程登陆显示-bash-4.1$,不显示用户名路径 网络上好多解决办法,大多是新建.bash_profile文件然后输入XXXXX....然而并没有什么用没有用.... ...

  9. 很好用的取代 PuTTY 的SSH远程登陆软件 Termius

    一直以来, 我都是用 PuTTY 一个窗口一个窗口来监视我所有的远程服务器. putty-connections-on-a-screen 总感觉非常的不方便, 特别是当远程链接断开需要再重新打开PUT ...

随机推荐

  1. Git应用详解第八讲:Git标签、别名与Git gc

    前言 前情提要:Git应用详解第七讲:Git refspec与远程分支的重要操作 这一节主要介绍Git标签.别名与Git的垃圾回收机制. 一.Git标签(tag) 1.标签的实质 标签与分支十分相似, ...

  2. python2.7安装numpy和pandas

    扩展官网安装numpy,use [v][p][n]下载得会比较快 然后在CMD命令行下进入该文件夹然后输入pip install +numpy的路径+文件名.比如我的是:pip install num ...

  3. Hadoop学习笔记(1)-Hadoop在Ubuntu的安装和使用

    由于小编在本学期有一门课程需要学习hadoop,需要在ubuntu的linux系统下搭建Hadoop环境,在这个过程中遇到一些问题,写下这篇博客来记录这个过程,并把分享给大家. Hadoop的安装方式 ...

  4. day5 作业

    tips:作业 作业: 0.分别画出下面两个列表在内存中是如何存放的 l1=[11,22,[333,444]] l2=[11,22,[33,{'name':'egon','age':18}]] ''' ...

  5. 图2-4TCP状态转换图

    这张图中描述了TCP中11个状态的转换. 光看这个图我一开始是蒙蔽的,也没有写服务器和客户端的操作流程.不过回头一想,是状态转换,也就是从一个状态到另外一个状态发生了什么,什么条件触发的.这样是不是好 ...

  6. python与excel的关系;铁打的python流水的excel

    现在很多行业,都离不开用Excel: 做财务的,要用Excel做报表:做物流的,会用Excel来跟踪订单情况:做HR的,会用Excel算工资:做分析的,会用Excel计算数据做报表.不知道你有没有这样 ...

  7. java 容器(collection)--ArrayList 常用方法分析 源码分析

    ArrayList 介绍 打开jdk源码看看官方文档的介绍 粗糙的翻译下大致意思是: List接口的可调整大小的数组实现.实现了所有可选的列表操作,并允许所有元素,包括 null .除了实现List接 ...

  8. 痞子衡嵌入式:大话双核i.MXRT1170之Cortex-M7与Cortex-M4互相激活之道

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是恩智浦i.MXRT1170上Cortex-M7与Cortex-M4内核互相激活的方法. 痞子衡最近在深耕i.MXRT1170这颗划时代的 ...

  9. java学习(第五篇)包装类

    一.Integer package com.test01; public class IntegerTest01 { public static void main(String[] args) { ...

  10. VC++ QT 数组的初始化

    数组有时会初始化为0. 但加了一个 QThread 的派生类对象之后,数组就不再被初始化为0了. 所以对于数组还是要手动初始化,否则可能产生无法预料的现象.