zoukankan      html  css  js  c++  java
  • 每天学五分钟 Liunx 010 | ssh


    Liunx ssh known_hosts
     
    known_hosts是做服务器认证的。当用 ssh 连接到一个新的服务器的时候,ssh 会让你确认服务器的信息(域名、IP、公钥),如果你确认了,就会把这些信息写到 known_hosts (~/.ssh/known_hosts) 里,下次登录的时候就不需要再确认了。
    [***@localhost ~]$ ssh -i test.pem test@10.57.***.***
    The authenticity of host '10.57.***.*** (10.57.***.***)' can't be established.
    ECDSA key fingerprint is SHA256:lmHAb/8OpqvHfFHpu03VchRuHh92PBmxO1Ms+NYDy58.
    ECDSA key fingerprint is MD5:61:82:03:13:ee:b8:a9:54:7f:75:f1:70:34:79:bb:88.
    Are you sure you want to continue connecting (yes/no)?
    以后再连接到这个服务器,但是信息改变了(通常是公钥改变了),就会提示你服务器信息改变了,你可以把它从 known_hosts 里删除,然后重新确认。
     
    查看 client 中的 known_hosts 的公钥:
    10.57.***.*** ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNy4NaIYXmUYmmpgr+rNzBURJgxLq+u0FxfHDFmiZLeymcWeMRMUsKL2ddxa8ZIoRpzUjo+wtO4pHb+SDjt/S+Q=
     
    当 client 登录 server 的时候,server 会将 /etc/ssh/ssh_host_ecdsa_key.pub 公钥发给 client,它自己有 ssh_host_ecdsa_key 这个私钥,用来确认这个 client 是可以登陆自己的。
    cat /etc/ssh/ssh_host_ecdsa_key.pub
    ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBNy4NaIYXmUYmmpgr+rNzBURJgxLq+u0FxfHDFmiZLeymcWeMRMUsKL2ddxa8ZIoRpzUjo+wtO4pHb+SDjt/S+Q=

     

    手动改掉 server 的 pub 和 private key,从 client 登陆 server,提示 Host Key verification failed:
    [test@localhost ~]$ ssh -i test.pem cbam@10.57.***.***
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the ED25519 key sent by the remote host is
    SHA256:1ZxM8C4eKvSfkD+ShGPEqCZvBz/LFwzwGHOhD2DtVuA.
    Please contact your system administrator.
    Add correct host key in /home/installer/.ssh/known_hosts to get rid of this message.
    Offending ECDSA key in /home/installer/.ssh/known_hosts:1
    ED25519 host key for 10.57.193.147 has changed and you have requested strict checking.
    Host key verification failed.
    [test@localhost ~]$
     
    删除 client 的 known_hosts 文件,重新登陆,登陆成功!
     
     
    Liunx ssh no_password & no_user
     
    设置免密登陆:
    1. client 上执行 “ssh-keygen -t rsa”,生成 pub 和 private key,无视提示,一路 Enter。
    2. 公钥 ~/.ssh/id_rsa.pub 复制到远程机器的 /home/username/.ssh 目录并命名为 authorized_keys。
    3. 本机登陆用户和远程登陆用户一致的话,就可以直接 ssh hostname 登陆,如果不一致的话通过 ssh user@hostname 登陆,要注意 authorized_keys 的权限,如果用户不一致的话要将权限设为 640。

        ssh 的时候不需要询问是否确认服务器信息是因为这些信息已经存在 ~/.ssh/known_hosts 文件了。

        更改远程主机的 hostname,通过 ssh user@other_hostname 的形式登陆: 在 /etc/hosts 文件中加上 “10.57.***.*** test.local”,test.local 是 10.57.***.*** 的别名,然后就可以通过 ssh test@test.local 的方式登陆 server。
        再去 known_hosts 中查看新加了一个 hostname 和 key:
    test.local ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIL7PlX4ltPy+WYRiexdY/r/XBX38oRm0m3uB8fIgTG94
        ps: /etc/hosts 文件,它是配置 ip 地址和其对应主机名的文件。可以记录本机或者其它主机对应的 ip 和主机名。它分为三部分:主机 ip / 主机名 / 主机名别名。
     
    1. 免用户名登陆: 在 .ssh/config 文件(如果没有的话可以自己新建一个)中写入 Host 和 user 的对应关系,如下:
    Host test.local
    user test
    1. 使用 ssh test.local 登陆 server,成功!

     

     
    Liunx 静态检查
     
    如果 client 端的 known_hosts 里没有 server 的信息,或者 server 的信息改变的话,那么下次登陆就会做公钥(静态)检查。但是,对于一些自动化脚本来说,执行静态检查会使得任务执行失败,此时取消静态检查是很有必要的。
    两种方式取消静态检查:
    1. ssh -o StrictHostKeyChecking=no hostname
    [***@localhost ~]$ rm -rf .ssh/known_hosts
    [***@localhost ~]$ ssh ***.local
    The authenticity of host 'cbam.local (10.57.***.***)' can't be established.
    ED25519 key fingerprint is SHA256:1ZxM8C4eKvSfkD+ShGPEqCZvBz/LFwzwGHOhD2DtVuA.
    ED25519 key fingerprint is MD5:19:89:9b:62:5d:70:8b:29:b6:05:01:41:73:bb:29:05.
    Are you sure you want to continue connecting (yes/no)? no
    Host key verification failed.
    [***@localhost ~]$ cd .ssh/
    [***@localhost .ssh]$ ls
    authorized_keys  config  id_rsa  id_rsa.pub
    [***@localhost .ssh]$ ssh -o StrictHostKeyChecking=no test.local
    Warning: Permanently added 'test.local,10.57.***.***' (ED25519) to the list of known hosts.
    Last login: Fri Jul 12 11:50:30 2019 from 10.57.193.149
    [test@*** ~]$ exit
    logout
    Connection to cbam.local closed.
    [***@localhost .ssh]$ ls
    authorized_keys  config  id_rsa  id_rsa.pub  known_hosts

     注意,静态检查不意味着不会将 server 的信息加载到 known_hosts 中,只是说不做检查了。同时,Warning 信息还是会有的,取消静态检查并不会取消掉 Warning。

     
    2. 在 ~/.ssh/config (如果没有的话创一个) 文件中添加 StrictHostKeyChecking no 这一句:
    cat ~/.ssh/config
    StrictHostKeyChecking no
    补充:禁用静态检查会导致如果 server 的公钥改变的话,会提示告警,但是 client 还是可以登陆上去:
     
    [***@localhost .ssh]$ vi known_hosts
    [***@localhost .ssh]$ ssh -o StrictHostKeyChecking=no  ***.local
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
    Someone could be eavesdropping on you right now (man-in-the-middle attack)!
    It is also possible that a host key has just been changed.
    The fingerprint for the ED25519 key sent by the remote host is
    SHA256:1ZxM8C4eKvSfkD+ShGPEqCZvBz/LFwzwGHOhD2DtVuA.
    Please contact your system administrator.
    Add correct host key in /home/installer/.ssh/known_hosts to get rid of this message.
    Offending ECDSA key in /home/installer/.ssh/known_hosts:1
    Password authentication is disabled to avoid man-in-the-middle attacks.
    Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
    Last login: Fri Jul 12 12:14:32 2019 from 10.57.193.149
    [***@*** ~]$ exit
     
    取消这种告警,无视公钥改变可指定 “UserKnownHostsFile=/dev/null” ,提示信息就会变为首次连接的提示。
    “ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null” 配合使用则公钥改变也不会出现告警。
    [root@*** ~]cat ~/.ssh/config
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
     
    [root@*** ~]# ssh root@10.57.***.***
    Warning: Permanently added '10.57.***.***' (ECDSA) to the list of known hosts.
    Last login: Fri Mar  6 00:22:15 2020 from 10.57.200.86
    [root@*** ~]#
    注意,设置了 UserKnownHostsFile=/dev/null,client 在登陆 server 的时候不会将 server 的信息添加到 known_hosts 中。
     
     
    (完)
  • 相关阅读:
    poj 2109Power of Cryptography
    poj 2632Crashing Robots
    poj 2586Y2K Accounting Bug
    linux0.12中文件系统的一些理解
    latex初学者的经验
    关于linux0.12中的add_entry中bread中的些猜测
    uid gid euid egid详解
    关于linux0.12文件系统目录大小的一个发现
    我的初级muttrc配置
    使用STM32的USB模块中后对USB缓冲区的认识
  • 原文地址:https://www.cnblogs.com/xingzheanan/p/12435191.html
Copyright © 2011-2022 走看看