zoukankan      html  css  js  c++  java
  • ssh_key认证

    ssh认证流程步骤:

    1.主机host_key认证

    2.身份验证

    3.身份验证通过

    原理及更多知识点,请查看好友博客 http://www.cnblogs.com/f-ck-need-u/p/7129122.html

    -------------------------------------------------------------------------------------------------------------------

    1.主机host_key验证过程:(只需一次,此时服务端B-server持有的host_key为私钥,A-client持有的是来自B-server的公钥)

    A-client要想链接到B-server,首先进行主机验证(host_key),判断本机以前是否链接过B-server,判断的标准是查看自身家目录下文件~/.ssh/known_hosts中内容,是否有B-server的主机信息host_key,如果没有该地址的host_key,则询问是否保存主机B发送过来的host_key,如果有,则将此文件中host key和主机B发送过来的host_key做比对,如果完全相同,则表示主机A曾经保存过主机B的host_key,无需再保存,直接进入下一个过程——身份验证,如果不完全相同(或者内容被修改过),则提示是否(重新)保存主机B当前使用的host_key。

    ~/.ssh/known_hosts     #<==A-client
    /etc/ssh/known_hosts   #<==B-server
    
    [test@A-client ~]$ ssh -p 52113 test@10.0.0.4 
    The authenticity of host '[10.0.0.4]:52113 ([10.0.0.4]:52113)' can't be established.
    RSA key fingerprint is d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21.
    Are you sure you want to continue connecting (yes/no)? yes 
    Warning: Permanently added '[10.0.0.4]:52113' (RSA) to the list of known hosts.
    test@10.0.0.4's password: 
    [test@B-server ~]$ logout
    Connection to 10.0.0.4 closed.
    [test@A-client ~]$ cat .ssh/known_hosts     #<===在主机A上查看保存的host_key
    [10.0.0.4]:52113 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnmy+37PLTSWUlEp/t3c4xJoUFtZ1hlnMuXddxfeFM0x0Mq03y6vuaK8w6KY4V/VPTYuI3NeBHdVkBy2vQFba4O5uBU8GZJ+iyfnnL/klHKgrB2+Oq0mNbEATaJDOVbsIgjVUsPCTwSeVYfevkl9Zcd5QLgR0Hzr83y4iLvZcewosvxOnCE7dTXQQej1GCLpxZLSHhUg/gt9M3Z2KnqoFuSawVr3dIMzQrtlqAjixKmvDI/uGFHRAylflsXHdNyb+ggCSdsy84q9FfCND44KHWrLLLpupyA7ARE1O7TmGkLMhtWb8o09+7HV1n3rTi+3eJCTXTGE24f/OjDUdx8I+lQ==
    说明:
    1.每一行的行首是主机名,为搜索host_key时的索引
    2.如果内容被修改过,则丢弃,重新询问是否保存 [root@B-server ~]# cat /etc/ssh/ssh_host_rsa_key.pub #<===在主机B上查看自身host_key(回应给其他请求链接的主机host_key) ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAnmy+37PLTSWUlEp/t3c4xJoUFtZ1hlnMuXddxfeFM0x0Mq03y6vuaK8w6KY4V/VPTYuI3NeBHdVkBy2vQFba4O5uBU8GZJ+iyfnnL/klHKgrB2+Oq0mNbEATaJDOVbsIgjVUsPCTwSeVYfevkl9Zcd5QLgR0Hzr83y4iLvZcewosvxOnCE7dTXQQej1GCLpxZLSHhUg/gt9M3Z2KnqoFuSawVr3dIMzQrtlqAjixKmvDI/uGFHRAylflsXHdNyb+ggCSdsy84q9FfCND44KHWrLLLpupyA7ARE1O7TmGkLMhtWb8o09+7HV1n3rTi+3eJCTXTGE24f/OjDUdx8I+lQ==
    注意:
    1.服务端使用的host_key是sshd服务启动时重新建立的,保存在/etc/ssh/ssh_host_rsa_key 文件中(私钥)和/etc/ssh/ssh_host_rsa_key.pub(公钥,主机验证)
    2.ssh将host_key.pub公钥转换为指纹比对,以此验证双方的host_key指纹是否一致
    [test@A-client ~]$ ssh-keygen -l -f .ssh/known_hosts 
    2048 d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21 [10.0.0.4]:52113 (RSA)
    
    root@B-server ~]# ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub 
    2048 d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21 /etc/ssh/ssh_host_rsa_key.pub (RSA)
    
    [test@A-client ~]$ ssh-keygen -lv -f .ssh/known_hosts 
    2048 d4:82:8d:5c:83:52:e9:79:2c:e3:3f:6a:fd:eb:4b:21 [10.0.0.4]:52113 (RSA)
    +--[ RSA 2048]----+
    | ..oo |
    | ..o= o |
    | o+o+ . |
    | =.o. |
    | . +E . |
    | . . . |
    | o . |
    | . +. |
    | ... +=o |
    +-----------------+

    2.身份验证,身份验证常见是公钥验证和密码验证,如果公钥验证通过,则无需进行密码验证;如果不使用公钥验证方法,就是密码验证,在上一步的基础上,输入远程用户的密码,密码正确则验证通过(基于用户,需每个用户单独验证;公钥验证一般由客户端生成密钥对,保留私钥,传送公钥给服务端;客户端如果再次分发公钥给自己,并传送私钥给服务端,以此可以实现双机互信)

    相关文件:

    ~/.ssh/id_rsa           #<===私钥
    ~/.ssh/id_rsa.pub       #<===公钥
    在A-client上生成密钥对
    [test@A-client ~]$ ssh-keygen -t rsa      #<==指定-t参数,rsa为非对称密钥算法,生成密钥对
    Generating public/private rsa key pair.
    Enter file in which to save the key (/home/test/.ssh/id_rsa): 
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in /home/test/.ssh/id_rsa.
    Your public key has been saved in /home/test/.ssh/id_rsa.pub.
    The key fingerprint is:
    13:0d:da:79:84:8d:ef:14:ad:5b:09:20:45:c6:65:b0 test@A-client
    The key's randomart image is:
    +--[ RSA 2048]----+
    | .+BB+. |
    | =+B+ . |
    | . E.o+ . |
    | o+ o |
    | So o |
    | .o |
    | |
    | |
    | |
    +-----------------+
    [test@A-client ~]$ ll .ssh/       
    总用量 12
    -rw------- 1 test test 1675 1月 22 15:33 id_rsa        #<==注意,私钥文件权限必须为600,如果权限不一致,会导致私钥解锁公钥失败
    -rw-r--r-- 1 test test 395 1月 22 15:33 id_rsa.pub
    -rw-r--r-- 1 test test 398 1月 22 12:03 known_hosts
    
    [test@A-client ~]$ ssh-copy-id -i "-p 52113 test@10.0.0.4"     #<==传送公钥到B-server,注意加双引号
    [test@A-client ~]$ ssh-copy-id -i .ssh/id_rsa.pub "-p 52113 test@10.0.0.5"
    The authenticity of host '[10.0.0.5]:52113 ([10.0.0.5]:52113)' can't be established.
    RSA key fingerprint is f4:0b:56:80:aa:99:67:74:2a:ce:34:b4:ab:1d:a7:40.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '[10.0.0.5]:52113' (RSA) to the list of known hosts.
    test@10.0.0.5's password: 
    Now try logging into the machine, with "ssh '-p 52113 test@10.0.0.5'", and check in:
    
    .ssh/authorized_keys
    
    to make sure we haven't added extra keys that you weren't expecting
    Now try logging into the machine, with "ssh '-p 52113 test@10.0.0.4'", and check in:
    .ssh/authorized_keys
    to make sure we haven't added extra keys that you weren't expecting.
    ssh-copy-id的实质(查看cat /usr/bin/ssh-copy-id 脚本可知):
    1.检测目标主机指定用户的家目录下,是否存在.ssh目录,没有则以700创建该目录
    2.将本地的公钥,传送至目标主机的.ssh/下,并更改文件名为authorized_keys(sshd_config中定义),权限为600

    3.基于公钥验证通过

    [test@A-client ~]$ ssh -p 52113 10.0.0.4 
    Last login: Tue Jan 22 12:03:09 2019 from 10.0.0.2
    [test@B-server ~]$ logout
    Connection to 10.0.0.4 closed.
    [test@A-client ~]$ ssh -p 52113 10.0.0.5 
    [test@C-server ~]$
  • 相关阅读:
    python socks5 代理服务
    F# 语言参考【摘自MSDN】
    vs2003版本的程序转换为vs2008版本时出现的一些问题及解决办法
    【转】SQL to Mongo Mapping Chart
    jQuery UI Download
    jQuery UI Multiselect
    jqGrid search oper
    apache下用expires_module让浏览器缓存静态文件
    【转】谈谈浏览器的缓存过期时间
    USACO 1.1 Friday the Thirteenth
  • 原文地址:https://www.cnblogs.com/blog-tim/p/10305229.html
Copyright © 2011-2022 走看看