zoukankan      html  css  js  c++  java
  • linux实践——SSH手记

    SSH为 Secure Shell 的缩写,是一种网络协议,用于计算机之间的加密登录,有两个不兼容的版本分别是:1.x和2.x。

    SSH密钥对 总是成双出现的,一把公钥,一把私钥,类似一套锁具,公钥可以自由的放在您所需要连接的 SSH 服务器上,而私钥必须稳妥的保管好,生成密钥对的工具很多linux平台的ssh-  keygen命令、win平台的puttygen.exe、myeclipse的ssh2(preferences中直接搜索)各工具的使用教程很多。

      公钥长这样-》

    ---- BEGIN SSH2 PUBLIC KEY ----
    Comment: "rsa-key-20160810-openwrt"
    AAAAB3NzaC1yc2EAAAABJQAAAQEAlKYw7SZ3Riwf9xnKrN5eZBh8OiIzXCH3G0oN
    XmaoqNgd9AHQd33zHZ9ibsXUwTAPcpnt8nZB6hwFzl42++NqQlTb7KvY/bCqGvkc
    SlIlzel4P4Kh0bssZzXfm3DeUEqxQeTtPyKdfmXhKYPugIbD3RRypy1ZuVcXK58w
    qVa3pXqUDAA+ZqgHkWUt+I6GCjJsxLhOfBsRFuWqtAGM6T7CAxlTNxyq1RMwd7Ms
    x83TX3AaSsvQnMjKujXrjPcVhG++opO1r3qnhljVLqqLRKxnZiuVVT/y3/Gak6ZJ
    LdHDn+NKN2UD0xxPsjFA4rVAPWhUlQbESYMdNRfIpjiLYkEGUQ==
    ---- END SSH2 PUBLIC KEY ----
    

      公钥指纹-》

        

      私钥长这样-》

    PuTTY-User-Key-File-2: ssh-rsa
    Encryption: none
    Comment: rsa-key-20160810-openwrt
    Public-Lines: 6
    AAAAB3NzaC1yc2EAAAABJQAAAQEAlKYw7SZ3Riwf9xnKrN5eZBh8OiIzXCH3G0oN
    XmaoqNgd9AHQd33zHZ9ibsXUwTAPcpnt8nZB6hwFzl42++NqQlTb7KvY/bCqGvkc
    SlIlzel4P4Kh0bssZzXfm3DeUEqxQeTtPyKdfmXhKYPugIbD3RRypy1ZuVcXK58w
    qVa3pXqUDAA+ZqgHkWUt+I6GCjJsxLhOfBsRFuWqtAGM6T7CAxlTNxyq1RMwd7Ms
    x83TX3AaSsvQnMjKujXrjPcVhG++opO1r3qnhljVLqqLRKxnZiuVVT/y3/Gak6ZJ
    LdHDn+NKN2UD0xxPsjFA4rVAPWhUlQbESYMdNRfIpjiLYkEGUQ==
    Private-Lines: 14
    AAABAAgI+7nKulbR8+PX4XEgxtT6Z5RwjSeTIh0mmPBYk36/kuqYUHUpZxZbpHSw
    v2RjdnTludXBM/7RFRIS7jchDKmjuNxcUOseTmJSp5VQjGv+yDrIynoKHhNqsiQT
    8Fdd+75fZsUkdzdDxvtTPVMONBnJwQIeIIaPFgJbocP22X6Q66OGj4Y+JJHp9e3R
    NPiGOSXWjAODqIku60EpGMDwJrvDvS0JT+O/7BV6dm1VnsILhcjnJoX+GwL85zeF
    oVKYAwJENFT1AlC9PK3SdgtY/F5nH+mFHqwLnoUMBtXr+PDoBMwvhIFO1No5dee4
    i9FNwDAi83rEyMAclrVD8VICn60AAACBAOpXtJxWo9pWnqbcLuCLWUXKhwPUXlwt
    bmsKOKD9RjcG+LczKCEIbV45Zb1XqE3RcYTK3SLVi+08yXly9x+S9ymju2DH4rue
    PVAbF7qVigvrC2j6/6259osL4YVr6F/4igxUyFdJS90JA4MRgc+Mfqsao3Mwgdhe
    btGRcgonlULxAAAAgQCiYxJC3IaIr15BbMFRiSYFvjAsZrkG/5M/dFCh+p2+antw
    QshD10dCsPPgiXWMiClqezplGF/pxiW8ltfNeXxdVOqMw+NBEm6ig91I3TQeqKxd
    +iGNtyQa6mZFTFvmPpTlIS2ZMZ4Q5Aa4kl1WEMtF/9y4ucjC9JgS+12QzXs5YQAA
    AIApm0Ke+L9J+KNKEuRbFyFwe8iYglAgmMpYTLUuz5o/fgli3YmyI9bIerR3VjkD
    E8+PE0Cg4Z9QYLKhXLCdGpVnThwdyEm1YZJzBEtP7OEdHUvqfw0DOnPAfBtQOOzx
    kZ7uUTZBH3CAK7az2hNgtQQzrUetoMAk/D82jakSaPq+0g==
    Private-MAC: 9104dff943f0de88d8e3215ff66acc9af0f9f5a3
    

      注:我在使用digitalocean时发现setting-security-ssh keys的页面,该页面只是将自己生成的密钥对上传到DO平台,当建立droplets的时候现成使用和操作ssh远程登录没有多大关系。

    口令登录 远程主机收到用户的登录请求,把自己的公钥发给用户。用户使用这个公钥,将登录密码加密后,发送回来。远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录,反则。在这个过程中就会可能存在“中间人攻击”(Man-in-the-middle attack),所以,当用户第一次登录远程ssh服务时,系统会提示: 

    The authenticity of host 'host (x.x.x.x)' can't be established.
    RSA key fingerprint is 9b:76:b5:31:7c:9a:d3:99:b3:c3:d6:c8:44:36:51:a1.
    Are you sure you want to continue connecting (yes/no)?
    

      无法确认host主机真实性只知道公钥指纹(公钥指纹是通过公钥计算出的,在我们使用各种工具生成密钥对时都能知道公钥指纹,上面提到的DO的ssh keys页也就是用在这里),问你还要不要连接?确定是我自己生成的密钥对中的公钥后,yes,系统会提示:

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

      该主机已经加入已知主机列表,然后,输入主机密码:

    Password: (enter password)
    

      然后就看密码正确是否。上面的对话是linux bash的显示,win putty也会有类似的对话框提示,当远程主机密钥被接受,会保存在$HOME/.ssh/known_hosts文件中,下次连接时就不在有警告提示,口令登录每次都需要输入密码验证,很多时候比较麻烦,而且如果ssh服务禁止口令验证的话这种方式就行不通。

    公钥登录 就是用户将自己的公钥储存在远程主机上(%h/.ssh/authorized_keys)。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录 shell,不再要求密码。这样子,我们即可保证了整个登录过程的安全,也不会受到中间人攻击。

    上传公钥到远程主机,常用的命令:  

    #1、ssh-copy-id 公钥路径 端口 ssh登录
    $ ssh-copy-id -i ~/.ssh/id_ecdsa.pub -p 221 username@remote-server.org
    
    #2、scp 公钥路径  ssh登录
    $ scp ~/.ssh/id_ecdsa.pub username@remote-server.org
    
    #3、cat
    $ cat ~/.ssh/id_ecdsa.pub >> ~/.ssh/authorized_keys
    

      文件(目录)不存在就新建(mkdir),存在就添加,为保证安全authorized_keys文件权限设置为拥有者读写(600)。  

    chmod 0700 ~/.ssh
    chmod 0600 ~/.ssh/authorized_keys
    

      检查ssh是否开启公钥登录,查看远程主机的/etc/ssh/sshd_config文件

    RSAAuthentication yes
    PubkeyAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    

      测试方法不述,公钥登录没问题的话就可以禁用密码登录了,直接使用账户密码登录容易受到暴力破解的攻击(当然也有办法防御denyhost),修改远程主机的/etc/ssh/sshd_config文件

    PasswordAuthentication no
    

      或者禁止root口令登录(一般情况是禁止root登录的即设为no)

    PermitRootLogin  without-password
    

      留个疑问,win下的putty如何上传公钥?

      本文所以系统版本ubuntu12.04

  • 相关阅读:
    MySQL存储引擎MyISAM和InnoDB有哪些区别?
    python发起post请求获取json数据使用requests方法
    和 Python 2.x 说再见!项目移到python3
    php memcache 缓存与memcached 客户端的详细步骤
    Ubuntu16.04安装Nginx+PHP5.6+MySQL5.6
    element-ui select 下拉框 实现分页 通过css样式
    技术_pm发展历程
    前端_git用法
    前端_javascript本地实现分页(摘录)
    生活_人生感悟
  • 原文地址:https://www.cnblogs.com/perfectzhang/p/6673288.html
Copyright © 2011-2022 走看看