zoukankan      html  css  js  c++  java
  • ssh 配置无密码登录

     免密

     下框中在管理机上运行:

    [root@master ~]# ssh-keygen -t rsa  #它在/root/.ssh下生成id_rsa和id_rsa.pub两个文件
    [root@master ~]# ssh-copy-id root@192.168.1.128  #将公钥发给被管理端  #或者手动把生成的秘钥存放到要远程的机器的/root/.ssh/目录下权限必须设置为600
    [root@master ~]# ssh root@192.168.1.128 
    [root@master ~]# ssh-agent bash  #私钥交给ssh-agent保管
    [root@master ~]# ssh-add  ~/.ssh/id_rsa #向ssh-agent添加公钥身份验证

    $ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
    #-t 指定rsa 加密算法
    #-P 指定密码,次数为空
    #-f 指定key文件路径

    ssh -i ~/.ssh/id_rsa_test2 root@10.1.0.3    #指定对应私钥文件连接远程用户

     
    启动ssh-agent
    如下两种方式均可启动ssh-gent
    方式一:创建子shell,在子shell中运行ssh-agent进程,退出子shell自动结束代理。
    ssh-agent $SHELL
    
    方式二:单独启动一个代理进程,退出当前shell时最好使用ssh-agent -k关闭对应代理
    eval `ssh-agent`
    
    关闭ssh-agent
    ssh-agent -k
    
    将私钥添加到ssh代理
    ssh-add ~/.ssh/key_name
    
    查看代理中的私钥
    ssh-add -l
    
    查看代理中的私钥对应的公钥
    ssh-add -L
    
    移除指定的私钥
    ssh-add -d /path/of/key/key_name
    
    移除代理中的所有私钥
    ssh-add -D
    
    锁定ssh代理
    锁定时需要指定锁定密码,锁定后的ssh代理暂时不能帮助我们管理私钥
    ssh-add -x
    
    解锁ssh代理
    解锁时需要输入创建锁时设定的密码,解锁后ssh代理可正常工作
    ssh-add -X 
    

      

    5 使用ssh-agent

    ssh-agent

    ssh-agent是密钥管理器

             运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,其他程序需要身份验证的时候可以将验证申请交给ssh-agent来完成整个认证过程

    好处1:不用重复输入密码
    如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

    好处2:不用到处部署私钥
    假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 Forwarding(转发) 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B;可以在A上直接sftp传文件到B上。

    如这边有一台机器是local,能通过公钥直接登陆server1和server2。server1和server2之间无公钥登陆。

    现在要在server1上直接登陆server2,在local上执行

    $ssh-agent bash
    $ssh-add  ~/.ssh/id_rsa
    

    执行了之后就将私钥给ssh-agent保管了,server1上面登陆server2的时候,需要私钥验证的时候直接找ssh-agent要就可以了
    接下来登陆server1,注意-A

    ssh -A server1
    

    可以发现server1上多了/tmp/ssh-xxxxxxxxx/agent.xxxxx的socket,之后神奇的事发生了,在 server1上可直接进server2,只需执行如下命令,如果加了-A则可以继续ssh forwarding(转发) ,以至无限的机器forwarding。
    ssh (-A) server2
    同样的原理可以试一下sftp, scp等基于ssh的命令。

    如运行ssh-add,遇到Could not open a connection to your authentication agent.。

    解决:需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面。

    $ssh-agent bash --login -i

    SSH的高级应用
    使用远程主机不中断的跑程序

    当我们利用ssh在远程主机上跑程序的时候,只要关闭了终端就会中断ssh连接,然后远程主机上正在跑的程序或者服务就会自动停止运行。我们可以利用 nohup + 需要运行的程序 使运行的程序在切断ssh连接的时候仍然能够继续在远程主机中运行。nohup即no hang up(不挂起)。

    除此之外还有很多远程操作应用,包括 数据传输、端口操作(将不加密的网络连接绑定到ssh端口实现间接加密) 等等,可以参考柚子皮大神的博客:https://blog.csdn.net/pipisorry/article/details/52269785
    -------------------

    原理介绍:

    SSH 为建立在应用层和传输层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH 协议可以有效防止远程管理过程中的信息泄露问题。

          从客户端来看,SSH提供两种级别的安全验证:

    1、基于口令的验证

         只要知道帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但缺点是:不能保证你正在连接的服务器就是你想连接的服务器。以下是我画了的登录验证流程:

          当第一次链接远程主机时,会提示您当前主机的”公钥指纹”,询问您是否继续,如果选择继续后就可以输入密码进行登录了,当远程的主机接受以后,该台服务器的公钥就会保存到~/.ssh/known_hosts文件中。

    2、基于密钥的验证

        这种验证的前提是客户端需要生成一对密钥,将公钥放到需访问的远程服务器。这种验证比上一种的好处是,不能仿冒真正的服务器,因为要仿冒必须拿到客户端生成的公钥。缺点就是验证等待过程稍长些。

    如何生成密钥:

    1、在客户端打开终端,执行ssh-keygen,该命令会默认在~/.ssh/目录下创建id_rsa、id_rsa.pub两个文件,分别为您的公钥和私钥。

    2、将公钥id_rsa.pub文件拷贝到服务器端的~/.ssh/authorized_keys文件中,有三种方法:

    • 通过scp拷贝:
      •  例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys     #可选参数-P代表指定用端口号22
    • 通过ssh-copyid程序:
      •  例:ssh-copy-id user@host  #此种方式简单,不需追加改文件名,但不能指定端口号,默认以22端口
    • 通过cat方法:
      •  例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’

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

    免密码登录原理

    ssh免密码登录原理图 
    图解,server A免登录到server B: 
    1.在A上生成公钥私钥。 
    2.将公钥拷贝给server B,要重命名成authorized_keys(从英文名就知道含义了) 
    3.Server A向Server B发送一个连接请求。 
    4.Server B得到Server A的信息后,在authorized_key中查找,如果有相应的用户名和IP,则随机生成一个字符串,并用Server A的公钥加密,发送给Server A。 
    5.Server A得到Server B发来的消息后,使用私钥进行解密,然后将解密后的字符串发送给Server B。Server B进行和生成的对比,如果一致,则允许免登录。 
    总之:A要免密码登录到B,B首先要拥有A的公钥,然后B要做一次加密验证。对于非对称加密,公钥加密的密文不能公钥解开,只能私钥解开。





  • 相关阅读:
    Java IO 之 RandomAccessFile 操作文件内容
    Java IO 之 FileFilter与FilenameFilter
    Java IO 之 File 的创建、重命名与遍历
    Java IO 之 System类
    JVM内存区域配置
    切换 显示与隐藏页面元素
    thead tfoot tbody标签的使用
    使用锚点在HTML页面中快速移动
    ASP.NET Core 项目归档
    检测到有潜在危险的 Request.Form 值 转
  • 原文地址:https://www.cnblogs.com/linuxws/p/10746221.html
Copyright © 2011-2022 走看看