SSH

SSH的作用是对数据进行加密处理。在互联网上直接使用明文传输是不安全的。中间人攻击就是通过窃取发送的明文数据,然后进行攻击。一个较为安全的方式是,把数据进行加密传输,这样使得攻击者获取到的数据内容是被加密的,没有实际的价值。加密方式有对称加密和非对称加密,对称加密有一定的风险,但是速度快;非对称加密速度慢,但是安全性极高。先分别介绍两种方式。

下面的内容参考了这几篇博客:

  • https://juejin.im/post/5abb6c8651882555784e051d
  • https://segmentfault.com/a/1190000004461428
  • https://www.ssl2buy.com/wiki/symmetric-vs-asymmetric-encryption-what-are-differences

对称加密以及SSH的应用

首先要理解加密算法的基本流程,我们先生成一个密钥,之后把这个密钥和需要加密的内容一起输入加密函数,加密函数会把信息进行内部的计算,输出加密的内容。对称加密的原理就是,加密内容和解密内容使用的密钥是同一个。常见的算法有DES、AES等算法等。一个好的加密算法有个特点,理论上在有意义的时间内,我们无法根据加密的内容和文本反推出密钥的内容。

对称加密基本的图解如下:

可以看出,加密解密的密钥是一致的。这种方式非常快,但是有安全问题。因为服务器是给客户端分发密钥的,如果密钥被泄露了,那么整个加密体系就被破坏了;因为此时可以有伪造的服务器利用这个密钥来欺骗客户端,或者有伪造的客户端利用密钥来欺骗服务器。

非对称加密以及SSH的应用

非对称加密的特点是,每个链接的两端分别生成各自的公钥和私钥,公钥是要发给通信的对方,而私钥是严格保密不外露的。对于一个非对称加密体系来说,公钥加密的信息,只有私钥可以解密;而私钥加密的信息,只有公钥可以解密。所以,对于通信的双方来说,只需要把自己的公钥发送给对方即可。如果要给对方发送消息,需要拿对方的公钥对消息进行加密,然后直接发送出去即可。这样,即使有人窃取消息,但是对方没有对应的私钥,就无法破解消息。同样的,接收到发来的消息时,我们需要拿自己的私钥对消息进行解密,这样就可以判别消息的真伪了。

给出一个示例图:

假设我们的公钥丢失了,那么这只会破坏局部的加密体系。因为伪造的一方只能只能用我们的公钥向对端发送消息,而它即使接收到对方的消息,也无法对消息进行解密。非对称加密虽然安全,但是速度比较慢,常用的方式是使用非对称加密进行核心的信息验证,比如登录、支付等,一般的非核心数据使用对称加密传输即可。

SSH的应用

基于口令和密码的对称加密

最简洁的使用方式:

ssh -l erick testsrver.com

erick是登录用户名,testserver.com是主机域名。或者还有一个方式是:

ssh erick@testserver.com

第一次输入需要输入yes

之后,在~/.ssh/know_hosts的文件中,就有对应的密钥了。我们在输入对应的密码,此时就可以进行远程登录了。这种方式涉及到了用户名和密码的登录,很有可能有中间人攻击,所以还可以考虑下一种方式。

基于密钥对的非对称加密

最基本的方式,生成密钥对:

ssh-keygen -t rsa -C "12345678@qq.com"

-t rsa说明这是使用rsa方式加密,-C后面的内容相当于一个注释。会有一个passphrasse,这是私钥的密码,一般不用输入。上面那个命令,如果经常使用Github,应该会很熟悉。之后,我们需要把公钥上传到服务器端:

ssh-copy-id -i /home/erick/.ssh/id_rsa.pub testserver.com

这句话的意思是,本机密钥在本地目录的/home/erick/.ssh/id_rsa.pub文件中,testserver.com是服务器域名,之后会把本地密钥会传送到服务器的指定位置。但是注意,此时仍然需要服务器ssh的密码才可以把公钥上传,这很容易理解,因为如果不用密码,那么攻击者就会不停地写入恶意公钥,导致服务器出现问题。

还有一个等效的方式:

scp /home/erick/.ssh/id_rsa.pub erick@testserver.com

还有另一个等效方式:

ssh erick@testserver.com
# 服务器下次要求匹配密钥对时,从authorized_keys文件开始查找
cat /home/erick/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

使用非对称加密传输配对后,再次登录远程服务器时,只需要输入:

ssh testserver.com

即可不使用用户名和密码进行登录了。

注意,我们之前生成密钥的时候,有一步提示密钥密码,一般来说,我们直接回车忽略即可,这样在ssh登录的时候,也是直接回车,其实ssh非对称加密的登录,也是有需要密码的,这个密码就是passphrase。一般不是严格加密的情况下,passphrase不必输入。

OpenSSH的密钥管理

上述提及了SSH的密钥处理方式。我们很多时候为了方便而不使用passphrase,这样做还是有个隐患。万一我们本地的私钥泄露了,那么加密体系就会出现问题。为了解决这个问题,又不想输入密码,可以使用ssh-agent程序。具体参考有关ssh-agent的手册来查询具体的使用方式。

SSH的工具套装

拷贝工具scp的实例:

scp dumb erick@testserver.com:.  # 把dumb文件拷贝到服务器对应的erick用户根目录上
scp erick@testserver.com:dumb:.  # 上述操作反过来

使用sftp拷贝。这是以ftp的模式拷贝文件,具体可以参考手册。

使用rsync拷贝文件。这个命令可以结合-e ssh参数与SSH结合使用。它的优势在于不会拷贝全部的文件,而是只会拷贝本
地目录和远程目录中有区别的文件。其使用高效的压缩算法,提高速度。

Screen

这个工具的目的在于处理那些耗时的任务。如果我们向服务器传输大量的文件,或者服务器端执行耗时的任务,那么此时客户端就得等待,贸然退出会发送SIGHUP信号,导致服务器进程退出。

Screen工具给shell提供一个screen命令,该命令在多进程之间多路复用一个物理终端的窗口模拟器。用户可以在一个screen回话中创建多个screen窗口,每个窗口就像操作一个真实的SSH连接窗口。

首先安装该工具:

sudo apt-get install screen

一个screen命名会创建一个全屏的shell窗口。Ctrl+a创建一个新的screen窗口,给出一个命令绑定键的表:

还有一些常用的选项,给出一个表,具体使用时再查看即可:

Linux Shell编程笔记9 SSH和Screen工具相关推荐

  1. linux+shell+func,Linux shell编程笔记总结

    Linux Shell学习笔记简介 Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口.它是命令语言.命令解释程序及程序设计语言的统称.shell是用户和Linux内核之间的接 ...

  2. Linux Shell编程笔记8 进程

    进程查看机制 ps (process state缩写)命令是进程查看命名,用于Linux系统中所有的进程查看.在当前文件夹下执行如下命令ps,显示: PID TTY TIME CMD7784 pts/ ...

  3. Linux Shell编程笔记10 Shell数组的补充

    数组可以通过下标或值进行索引,如果不存在,则值为空.比如: #!/bin/bash arr[0]=hello echo ${arr[1]} # 输出空内容 使用@输出所有数组的内容,使用#和@输出元素 ...

  4. Linux Shell编程笔记7 awk的应用

    简介 awk是用于基本文本处理的工具.一般遇到复杂格式等的处理问题时,应该优先想到使用awk.比awk更加高端的,还有perl语言,它专门用于文本处理.python也有丰富的文字处理功能,但是这是它的 ...

  5. Linux Shell 编程笔记

    2019独角兽企业重金招聘Python工程师标准>>> 常用命令 echo [STR] # 打印显示字符串 printf '[FORMAT]' [ARG] #格式化输出(不支持数据流 ...

  6. Linux Shell编程笔记6 sed流编辑器

    简介 sed是一个流编辑器,它会读取文件流,以行为单位进行处理.sed会按照顺序执行对每一行执行命令.sed把每一行结果写入标准输出,不修改任何输入文件.一般来说,文件流需要处理每一行的时候,需要借助 ...

  7. 《Linux Shell编程学习笔记之一》

    <Linux Shell编程学习笔记之一> 前言 由于自己一直在Windows上面编程,用linux用的比较少,学习linux还是本科大二学的一点点知识.因此自己就准备花点时间来熟悉下li ...

  8. Linux Shell编程学习笔记(4)

    Linux Shell编程学习笔记(2015-7-20) 分类:linux shell   今天学习了Linux Shell中的控制结构.其实大多数语言的控制结构这一块都是基本类似的,有了C语言的基础 ...

  9. Linux Shell编程学习笔记(2)

    Linux Shell编程学习笔记(2015-7-12) 分类:linux shell Shell变量 一:关于Shell变量   Shell是一种弱类型的语言,变量存储的一切值都是字符串.Shell ...

最新文章

  1. java 连nosql_浅谈 Java 中 MongoDB NoSQL数据库使用指南
  2. 一个用微软官方的OpenXml读写Excel 目前网上不太普及的方法。
  3. python移除链表元素
  4. qt连接错误ip的sqlserver超时时间_参数设置导致请求超时案例
  5. Linux的Nginx九:负载均衡
  6. 深度学习平台的未来:谁会赢得下半场?
  7. 记录cocos2d-x3.0版本号更改内容官方说明
  8. 计算连续登陆最大天数
  9. JavaWeb——web.xml配置详细解读
  10. 【react】---组件传值的介绍
  11. iOS 动画十四:Replicating Animations
  12. Image Pyramids
  13. [Android] SharedPreferences(轻量级的存储方式)
  14. 使用uTools快捷地图片转文字
  15. 中国超市智能储物柜市场需求动态与盈利前景预测报告2022-2027年
  16. 让物联网为“中国制造”插上腾飞的翅膀
  17. [练气期]计算机视觉之从矩阵本质修炼图像几何变换秘籍
  18. 如何设置Foxmail收取yahoo.com.cn和yahoo.cn以及yahoo.com等邮箱的方法
  19. python-docx文档高亮显示
  20. python批量下载模库网图片

热门文章

  1. python调用TensorFlow时报错:FutureWarning: Passing (type, 1) or ‘1type‘ as a synonym of type is deprecated
  2. Java 1.1.7 String API (!!!)
  3. P1181 数列分段Section I
  4. ##(C语言) CSP 201612-2 工资计算(打表法)(100分)
  5. 解决ubuntu中出现:dpkg: error processing package install-info
  6. Markdown中跳转,锚点操作浅析
  7. 【Qt教程】1.2 - Qt5 新建工程
  8. c/c++教程 - 1.3 关键字、标识符命名规则
  9. Pycharm远程调试:变量内容加载过慢或不能加载
  10. 敏捷开发“松结对编程”实践之一:人员结构篇(大型研发团队,学习型团队,139团队,师徒制度)...