zoukankan      html  css  js  c++  java
  • SSH2连接原理

    一,口令登录

    (1)在A机使用命令<ssh|sftp user@host>连接B机

    bash-4.2$ ssh user@www.xxx.net

      这段话的意思是,无法确认host主机的真实性,只知道它的fingerprint,问你还想继续连接吗?很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出fingerprint,以便用户自行核对。所谓fingerprint,是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5/SHA256计算,将它变成一个位位数很短的指纹。

    The authenticity of host 'www.xxx.net (111.111.111.34)' can't be established.

    RSA key fingerprint is SHA256:Z6DoSKxCQq4NGrGcQTcbWBC+hrZ38gqCLBNniHppaII.

    RSA key fingerprint is MD5:a2:78:ca:03:db:40:41:cc:c2:44:17:15:65:44:4c:11.

    (2)假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

    Are you sure you want to continue connecting (yes/no)? yes

    (3)B机收到请求后,将自己的公钥发给A

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

    (4)A收到公钥后,用公钥加密B的登陆密码,生成加密密文,发送给B

      有时候我们连接的是一个冗余或负载均衡的Server,fingerprint不是固定的,这个时候会出现"Host key verification failed"这样的错误。可以加<-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null>这两个参数来忽略hostkey check。

    Password: xxxxxx

    (5)B收到加密密文后,用自己的私钥解密,得到解密信息,然后与B的登陆密码做比较,正确则允许A登陆。

    sftp>

    二,公钥(免密)登录

    (1)在A机器上生成public key和private key,一般目录在$HOME/.ssh2中。

    (2)在B机器上安装A的public key,一般在$HOME/.ssh2/authorized_keys(存放远程连接主机的公钥,一行一个公钥,权限为600,可自定义,比如/etc/ssh/keys/user/)中。

    (3)A向B发送连接请求,并带上自己的公钥。

    (4)B收到A的公钥,检查机器上的授权列表是否包含有A的公钥,若存在,再生成一个随机数,使用公钥加密,生成加密密文发送给A。

    (5)A收到加密密文后,用私钥解密,得到的结果发送给B。

    (6)B收到A发来的结果,与之前生成的随机数作比较,一致则允许A连接。

  • 相关阅读:
    Python函数式编程学习笔记
    DOS常用命令总结
    Python高级特性学习笔记
    Git bash使用中...
    《零基础入门学习Python》学习过程笔记【30模块中的函数,os模块,ospath模块中的函数(看了一点)】
    这两天将这段时间的python笔记常用知识复习了一遍...前天半夜吃了盘烤羊肉..得了急性肠炎
    《零基础入门学习Python》学习过程笔记【29对文件进行分割】(没看)
    《零基础入门学习Python》学习过程笔记【28文件】
    《零基础入门学习Python》学习过程笔记【27集合】
    用python写一个简单的用户登陆程序(要求写成函数)
  • 原文地址:https://www.cnblogs.com/storml/p/14314421.html
Copyright © 2011-2022 走看看