linux服务器之间实现免密登录

(一)问题: 
假如我们现在有两台机器:ServerA和ServerB,现在想要让ServerA不用输入密码就能够进行访问。 
(二)方法和原理: 
我们使用ssh-keygen在ServerA上生成private和public密钥,将生成的public密钥拷贝到远程机器ServerB上后,就可以使用ssh命令无需密码登录到另外一台机器ServerB上。 
在linux系统中,ssh是远程登录的默认工具,因为该工具的协议使用了RSA/DSA的加密算法【默认是DSR算法】,该工具做linux系统的远程管理是非常安全的。 
(三)实验步骤: 
1.登录ServerA 
2. ssh-keygen -t  rsa,将会生成公钥和私钥文件id_rsa和id_rsa.pub【如果一直回车下去,最后这两个文件应该在/home/$USER/.ssh下面】 
3.将 .pub 文件复制到ServerB机器的 .ssh 目录下,并保存为authorized_keys 
可以使用: 
ssh-cop-id命令会将指定的公钥文件复制到远程计算机 
[oracle@Test232 ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub oracle@192.168.55.232   
(备注 手动将serverA的公钥赋值到authorized_keys  需要通过 service sshd restart 命令重启生效)
28 
oracle@192.168.55.232's password: 
Now try logging into the machine, with "ssh 'oracle@192.168.55.232'", and check in: 


.ssh/authorized_keys 


to make sure we haven't added extra keys that you weren't expecting. 


[oracle@Test232 ~]$ ssh oracle@192.168.55.232 
oracle@192.168.55.232's password: 
Last login: Thu Nov 24 16:05:32 2011 from 192.168.55.229 
[oracle@Test232 ~]$ 
4.大功告成,从A机器登录B机器的目标账户,不再需要密码了 
5.设置文件和目录权限【这一步可以省略,但是为了安全起见,加上也是有必要的~】 
设置authorized_keys权限 
chmod 644 authorized_keys 
设置.ssh目录权限 
chmod 700 -R .ssh 
6.要保证.ssh和authorized_keys都只有用户自己有写权限。否则验证无效。(今天就是遇到这个问题,找了好久问题所在),其实仔细想想,这样做是为了不会出现系统漏洞。 
报错: 
The authenticity of host '192.168.20.59 (192.168.20.59)' can't be established.  
RSA key fingerprint is 6a:37:c0:e1:09:a4:29:8d:68:d0:ca:21:20:94:be:18.  
Are you sure you want to continue connecting (yes/no)? yes  
Warning: Permanently added '192.168.20.59' (RSA) to the list of known hosts.  
root@192.168.20.59's password:   
Permission denied, please try again.  
root@192.168.20.59's password:   
Permission denied, please try again.  
root@192.168.20.59's password:   
Permission denied (publickey,gssapi-with-mic,password).  
如果说以上权限没有问题的话,那就赶紧去看看你的配置文件吧,因为有人会喜欢改这个东东,导致你无论如何都不会成功: 
打开/etc/ssh/ssh_config文件,找到以下部分: 
#   IdentityFile ~/.ssh/identity 
   IdentityFile ~/.ssh/id_rsa 
看看你的私钥名字是不是这个 ~/.ssh/id_rsa 


哈哈,还是得好好看配置文件喽~ 


假如有台中控机已经打通了到各台应用主机间的无密码远程登陆,现在需要打通另一台中控,下面是我写的脚本来实习此功能: 


##################################### 实现中控无密码登陆 ##################################### 


#!/bin/bash 
#Author:zhuying 
scriptdir=/home/oracle/zy/changecps 
for ip in `grep -v ^# "$scriptdir"/cps.ip` 
do 
scp /home/oracle/zy/changecps/169keys oracle@$ip:~/ </dev/null 
        ssh $ip "cat ~/169keys >> /home/oracle/.ssh/authorized_keys;rm ~/169keys" </dev/null 
        ssh $ip "cat /home/oracle/.ssh/authorized_keys|sort|uniq > /home/oracle/.ssh/tmp.keys" </dev/null 
        ssh $ip "mv /home/oracle/.ssh/tmp.keys /home/oracle/.ssh/authorized_keys" </dev/null 
        ssh $ip "chmod 644 /home/oracle/.ssh/authorized_keys" </dev/null 
done 
#####################################  实现中控无密码登陆 #####################################


ps: 


如果我们添加公钥后,还是无法访问,也可能是ServerA主机上面的一个文件known_hosts中已经存在ServerB的ip信息,删除重新访问即可。 


另外,如果以上方法尝试过后还是不行,可能是因为登录失败次数过多被锁定,这个时候我们就需要去看看我们的系统日志了/var/log/messages,将之前的锁定信息日志删除就可以了。 


参考文章: 


http://os.51cto.com/art/200812/101989_1.htm 
问题: 
(1)Connection closed by $IP可能是超过系统默认失败次数了,然后清理就ok了~【faillog -a;faillog -r】 
(2)在前面步骤都正确无误的情况下,每次远程登录还是提示让输入密码,这时候有可能是权限问题: 
  chmod 644 authorized_keys再次登录就ok了~【如果是Red Hat 5.6的话,最好改成600,否则认为是不安全的~】
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值