zoukankan      html  css  js  c++  java
  • 实现liunx之间无密码访问——ssh密匙

    环境描述

     两台linux服务器 172.16.1.22[client],172.16.1.33[server],想要实现client服务器ssh无密码访问server服务器。

     使用技术 linux 的ssh密匙,加密方式选 rsa|dsa均可以,默认dsa。

    配置过程

    1.登录client机器,生成密匙文件和私匙文件

      1)进入当前用户根目录下的隐藏目录 .ssh下

      [root@client ~]# cd  ~/.ssh

      2)生成client 服务器的私钥和公钥

      [root@client ~]# ssh-keygen -t rsa             <----ssh-keygen -t dsa 表示加密算法未dsa,后续生成文件对应显示dsa
      Generating public/private rsa key pair.
      Enter file in which to save the key (/root/.ssh/id_rsa):    <---按enter,生成密匙默认保存在该目录下
      Enter passphrase (empty for no passphrase):                <---按enter
      Enter same passphrase again:                              <---按enter
      Your identification has been saved in /root/.ssh/id_rsa.
      Your public key has been saved in /root/.ssh/id_rsa.pub.
      The key fingerprint is:
      ec:df:3d:c4:0f:9c:6d:c6:ec:fd:fc:d3:63:e0:f1:43 root@tesb
    

      将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub或id_dsa,id_dsa.pub

      3) 查看生成密匙文件

    [root@client .ssh]# ll -a
    总计 20
    drwx------  2 root root  4096 05-20 10:29 .
    drwx------ 18 root root 12288 2015-10-19 ..
    -rw-------  1 root root  1675 05-20 10:29 id_rsa
    -rw-r--r--  1 root root   391 05-20 10:29 id_rsa.pub
    -rwx------  1 root root   788 2015-11-05 known_hosts
    

      

    2. 将 .pub 文件复制到Server机器的 ~/.ssh 目录下, 并添加到authorized_keys文件中

      1)若server机器上~/.ssh 目录下不存在authorized_keys文件  

    [root@client .ssh]# scp id_rsa.pub root@172.16.1.33:~/.ssh/authorized_keys  <---注意:此时尚未建立信任,远程传输还是需要密码滴;scp:command not found参考下方异常处理

     2)若server上已经配置过其他的authorized_keys文件  

    [root@server .ssh]# cat id_rsa.pub >> authorized_keys

    检查server服务器端,~/.ssh目录下是否存在authorized_keys文件,且文件中包含.pub中信息。

    3.设置文件和目录权限,注意是server端    

    [root@server .ssh]# chmod 600 authorized_keys    #设置authorized_keys权限
    [root@server ~]# chmod 700 -R .ssh  #设置.ssh目录权限

    4.大功告成,从Client机器登录Server机器的目标账户,不再需要密码了  

    [root@client .ssh]# ssh 172.16.1.33 

    延伸-双向登陆的操作过程

    1、ssh-keygen做密码验证可以使在向对方机器上ssh ,scp不用使用密码.具体方法如下:

    2、两个节点都执行操作:#ssh-keygen -t rsa 
      然后全部回车,采用默认值.

    3、这样生成了一对密钥,存放在用户目录的~/.ssh下。
    将公钥考到对方机器的用户目录下 ,并将其复制到~/.ssh/authorized_keys中(操作命令:#cat id_dsa.pub >> ~/.ssh/authorized_keys )。

    4、设置文件和目录权限:
    设置authorized_keys权限
    $ chmod 600 authorized_keys 
    设置.ssh目录权限
    $ chmod 700 -R .ssh
     
    5、要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。
     
    注意事项
    1、文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,关键是密匙不生效了。
    2、生成的rsa/dsa签名的公钥是给对方机器使用的。公钥内容集中拷贝到远程机器的authorized_keys文件中。
    3、linux之间的访问直接 ssh 机器ip
    4、某个机器生成自己的RSA或者DSA的数字签名,将公钥给目标机器,然后目标机器接收后设定相关权限(公钥和authorized_keys权限),这个目标机就能被生成数字签名的机器无密码访问了

    异常处理:

    1.Client端,仍然在.ssh目录下,执行命令:

    ssh-add id_rsa
    系统如果提示:Identity added: id_rsa (id_rsa) 就表明加载成功了
    下面有几个异常情况处理:
     1)如果系统提示:could not open a connection to your authentication agent
      则需要执行一下命令:ssh-agent bash
      然后再执行上述的ssh-add id_rsa命令
     2)如果系统提示id_rsa: No such file or directory
       这是系统无法找到私钥文件id_rsa,需要看看当前路径是不是不在.ssh目录,或者私钥文件改了名字,例如如果建立的时候改成 aa_rsa,则这边命令中也需要相应改一下
     3)如果系统提示 command not found,那肯定是你命令敲错字符了
     4)如果提示Agent admitted failure to sign using the key,私钥没有加载成功,重试ssh-add

    注意id_rsa/id_rsa.pub文件不要删除,存放在.ssh目录下

    2.无法实现无密码访问,可能是权限设置不对,重新检查下权限

     注意 $ chmod 700 -R .ssh #设置.ssh目录权限,不要漏掉 -R参数,表示递归修改;或者在.ssh目录下使用命令 $ chmod 700 . 和 $ chmod 700 . .

    3. scp: command not found

    注:如果使用过程中提示“scp: command not found”这句,则说明你的服务器没有安装scp,请使用下面的命令安装。另外要注意的是,使用scp的时候,需要两台服务器都要安装scp,任何一方没有安装都不能正常使用:

    安装代码如下:

    yum -y install openssh-clients

  • 相关阅读:
    signals系列之一——基本用法
    libevent系列之一——libevent介绍
    memcached完全剖析系列——一、memcached基础
    分布式算法一——一致性hash算法
    spring容器启动过程
    dubbo源码之四——服务发布二
    dubbo源码之四——dubbo服务发布
    dubbo源码之三——dubbo重构
    dubbo源码之三-模块依赖
    [模板](luogu P3387)縮點
  • 原文地址:https://www.cnblogs.com/sylvia-liu/p/5511358.html
Copyright © 2011-2022 走看看