一、SSH

1、概述

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。简单说,SSH 是一种网络协议,用于计算机之间的加密登录。

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

SSH 之所以能够保证安全,原因在于它采用了公钥加密。

2、过程

(1)远程主机收到用户的登录请求,把自己的公钥发给用户。

(2)用户使用这个公钥,将登录密码加密后,发送回来。

(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

3、中间人攻击与解决办法

(1)什么是中间人攻击?

中间人收到远程主机公钥之后,冒充远程主机将伪造的公钥发给用户,用户将很难辨别真伪,用户用伪造的公钥加密时会被中间人截获,会出现安全漏洞。因为不像 https 协议,SSH 协议的公钥是没有证书中心(CA)公证的,也就是说,是自己签发的。

(2)解决办法:

如果是第一次登录对方主机,系统会出现下面的提示:

    $ ssh user@hostThe authenticity of host 'host (12.18.429.21)' can't be established.RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.Are you sure you want to continue connecting (yes/no)?

表示无法确认 host 主机的真实性,只知道它的公钥指纹是***,接受输入yes?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA(Rivest-Shamir-Adleman一直非对称加密算法),长达1024位),很难比对,所以对其进行 MD5 计算,将它变成一个128位的指纹。

上例中是 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d 以简化对比。远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。

输入 yes 后,出现:

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

然后,会要求输入密码。如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在文件 $HOME/.ssh/known_hosts 之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

每个 SSH 用户都有自己的 known_hosts 文件,此外系统也有一个这样的文件,通常是 /etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

二、使用场景

1、远程登陆

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

$ ssh user@host

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

$ ssh host

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

$ ssh -p 2222 user@host

上面这条命令表示,ssh 直接连接远程主机的 2222 端口。

2、SSH key 登陆

使用密码登录,每次都必须输入密码,非常麻烦。SSH提供了公钥登录,可以省去输入密码的步骤

用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用 ssh-keygen 生成一个:

$ ssh-keygen

其中一步是私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。

运行结束以后,在 $HOME/.ssh/ 目录下,会新生成两个文件:id_rsa.pub 和 id_rsa。前者是你的公钥,后者是你的私钥。

这时再输入下面的命令,将公钥传送到远程主机 host 上面:

$ ssh-copy-id user@host

好了,从此你再登录,就不需要输入密码了。

如果还是不行,就打开远程主机的 /etc/ssh/sshd_config 这个文件,检查下面几行前面"#"注释是否取掉。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

然后,重启远程主机的ssh服务。

// ubuntu系统
service ssh restart// debian系统/etc/init.d/ssh restart

3、使用 git gui 生成公钥私钥

 git Gui>Help>Show ssh key > generate

产生的 keys 存储在 Users/Username/.ssh 文件夹中。

4、其他

win10 使用 git clone ssh://user@host/**/**.git 的时候报错 no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

解决: 在 windows Users/Username/.ssh 中添加一个名为 config 的文件,中间填上

Host infrashdev003.sh.intel.comKexAlgorithms +diffie-hellman-group1-sha1

(SAW:Game Over!)

通信 / SSH介绍和使用,SSH key教程相关推荐

  1. SSH介绍和使用,SSH key教程

    1. SSH SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.简 ...

  2. SSH介绍与神器Tabby

    文章目录 一.什么是SSH 二.SSH的原理 三.SSH的安全性 中间人攻击 解决 四.SSH的使用 Linux Windows SSH工具的总结 五.Tabby 1. 根据自己的系统下载相应的Tab ...

  3. ssh 安全配置 以及ssh key 认证登录

    一.什么是 SSH ? SSH全称(Secure SHell)是一种网络协议,顾名思义就是非常安全的shell,主要用于计算机间加密传输.早期,互联网通信都是基于明文通信,一旦被截获,内容就暴露无遗. ...

  4. 如何在termius安装linux窗口,termius怎么使用?termius for mac使用ssh命令登陆服务器的方法教程...

    termius ssh 使用步骤是什么?mac系统一般都自带了命令行工具,但是在使用上面还不够方便.而mac版本Termius图形化命令行工具扩展了命令行工具的功能,那么,termius怎么使用呢?下 ...

  5. ansible:Using a SSH password instead of a key is not possible because Host Key checking

    问题背景 当设置好ansible的hosts后,尝试用ansible去连接host里设置的主机. 我使用的是162主机去连接163主机: 如果你之前从来没有连接过163主机,执行后会报错 [root@ ...

  6. Xshell配置ssh使用密钥公钥(publice key)登录

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://ultraera.blog.51cto.com/6640392/1671351 大 ...

  7. 大数据入门基础:SSH介绍

    什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录. 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露. ...

  8. ssh 介绍 和使用 程序不挂起

    目录 SSH的安全机制 SSH的安装 启动服务器的SSH服务 SSH两种级别的远程登录 SSH的高级应用 Secure Shell(SSH) 是由 IETF(The Internet Engineer ...

  9. git 生成ssh key_ubuntu git生成ssh key (公钥私钥)配置github或者码云

    Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需要SSH的配置. github的SSH配置如下: 设置Git的user name和email: git confi ...

最新文章

  1. Mybatis实现分库分表
  2. 【Python基础】Python之collections库-Counter
  3. PHP设置块注释的模板
  4. 和每个人密切相关的人工智能的应用
  5. 排序算法之 归并排序
  6. 生产环境下ftp的迁移并构建corosync+pacemaker的高可用
  7. linux系统怎么拨号上网,如何用 Linux 拨号上网
  8. 领域的初学者--推荐的一本书
  9. Javassist学习文档
  10. 用c语言找最大素数,C语言实现寻找大素数
  11. 小学思维导图免费模板合集!家长必收藏
  12. [算法导论] 邮递员问题代码c++实现,Floyd算法+dp,求遍历所有边回到起点的最短路径
  13. NLP-D23-cs224nkaggle房价预测复习chap5深度学习计算算法R2D7Unicorn
  14. C++实现的windows系统下的WIFI管理
  15. 生物信息学习--nr/nt 数据库(总+子)构建
  16. 微信支付-本地测试方法-java代码
  17. Perspectives
  18. Docker redis cluster集群的搭建
  19. 打开showModalDialog模式窗体并提交,且不打开新的IE窗口
  20. 计算机教程打字方法,电脑快速打字方法教程

热门文章

  1. 如何在ChemDraw中打出符号π
  2. SICP学习笔记(1.1.4~1.1.5)
  3. 【收藏】wsl2 出现 Vmmem内存占用过大问题解决
  4. Java BigDecimal类的使用入门示例
  5. Python3 解释执行字符串类型的代码
  6. Centos7安装netstat及简单使用
  7. Linux shell变量的命名规范
  8. 请说明一下垃圾回收的优点以及原理
  9. mybatis中使用sql @变量
  10. RabbitMQ Header模式