首先我们来谈一下要求:

 有三台机器;主机名分别为mgt01  c0101  c0102;

  1:我们把mgt01作为服务端,设置nfs共享/share目录,并且创建5个用户,把用户的家目录指向/share/home;

 2:设置nis服务,用来管理上面创建的5个用户

 3:设置ssh通信。使其能在任何一个用户上无密码访问三台主机!

 一:设置nfs共享,把普通用户的家目录放到/share目录下面,共享出去!

       1》用shell脚本创建10个用户,把用户的家目录放在/share目录下面,并且修改创建用户的密码为    61234230

脚本内容如下:

#!/bin/bash
if [ -e /share ];then
        mv /share   /share.back
        mkdir -p /share/home
else
        mkdir -p /share/home
fi
for i in `seq 1 5`;do
        if grep -q ^user"$i":/etc/passwd ;then
               userdel  "user$i"
                useradd -d/share/home/user$i  user$i
                echo 61234230 | passwd --stdinuser$i
        echo ok
        else
                useradd -d/share/home/user$i  user$i
                echo 61234230 | passwd --stdinuser$i
         fi
done


看一下脚本是否创建了所需用户:产生所需用户的家目录:

[root@mgt01 ~]# cd/share/home
[root@mgt01 home]# ls
user1  user2  user3 user4  user5

在/etc/passwd中产生了用户

[root@mgt01 ~]# tail -5/etc/passwd
user1:x:500:500::/share/home/user1:/bin/bash
user2:x:501:501::/share/home/user2:/bin/bash
user3:x:502:502::/share/home/user3:/bin/bash
user4:x:503:503::/share/home/user4:/bin/bash
user5:x:504:504::/share/home/user5:/bin/bash
[root@mgt01 ~]#


2》然后用nfs共享把创建的/share目录共享出去    /nfs的搭建参考http://zidingyi.blog.51cto.com/10735263/1708535

[root@mgt01 ~]# vim/etc/exports
/share  *(rw,no_root_squash){注意设置权限}


3》在客户端挂载:

[root@c0102 ~]# mount -t nfs10.1.1.114:///share /share
 [root@c0102 ~]# df -h
Filesystem           Size Used Avail Use% Mounted on
/dev/sda3             14G  1.9G  11G  15% /
tmpfs                939M     0 939M   0% /dev/shm
/dev/sda1            283M   40M 228M  15% /boot
10.1.1.114:///share   14G 5.2G  7.5G  41% /share


4》再把挂载命令写入客户端的/etc/fstab中,让它开机自动挂载!

10.1.1.114:///share  /share   nfs     defaults        0 2

注意写入/etc/fstab命令的格式

5》我们也可以检测一下,nfs是否共享成功!

[root@c0101 ~]# cd /share/home
[root@c0101 home]# ls
user1 user2  user3  user4 user5
[root@c0101 home]#

二:设置nis,添加帐号管理!

     在nis的服务器端设置

1》由于 NIS 服务器需要使用 RPC 协议,且 NIS 服务器同时也可以当成客户端,因此它需要的软件就有底下这几个: 

yp-tools :提供 NIS 相关的查寻指令功能
ypbind  :提供 NIS Client 端的设定软件
ypserv  :提供 NIS Server 端的设定软件
rpcbind :就是 RPC 一定需要的数据啊!


所以可以首先安装这些应用:yum install –y  yp*

2》首先设置nis的领域  /若更改nis域名,则必须重启network,或者用nisdomainname更改!

[root@mgt01 ~]# vim/etc/sysconfig/network
NETWORKING=yes
HOSTNAME=mgt01
NISDOMAIN=LINGYU/文件中自带的内容不要改动,设置其领域为名LINGYU/

3》nis的主要配置文件是/etc/ypserv.conf

        我们可以修改这个配置文件,也可以保持不变,使用其默认配置!

4》设定主机与ip对应;NIS 大部分是给局域网络内的主机使用的,所以当然就不需要 DNS 的设定了。/配置文件直接在后面加入ip地址和主机名的照应

[root@mgt01 ~]# vim  /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4
::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6
10.1.1.114   mgt01
10.1.1.115   c0101
10.1.1.116   c0102


5》启动观察

 [root@mgt01 ~]# /etc/init.d/ypserv restart
   [root@mgt01 ~]# /etc/init.d/yppasswddrestart

6》检查一下看是否正常启动:

[root@mgt01 ~]# rpcinfo -ulocalhost ypserv
program 100004 version 1ready and waiting
program 100004 version 2ready and waiting/若出现“准备就绪等待服务”说明启动正常!

7》处理帐号并建立数据库;

 [root@mgt01 ~]# /usr/lib64/yp/ypinit –m  /
需要注意的是若你的系统是32位的。则需要把命令中的64去掉,然后再执行!
At this point, we have toconstruct a list of the hosts which will run NIS
servers.  mgt01 is in the list of NIS serverhosts.  Please continue to add
the names for the otherhosts, one per line.  When you are donewith the
list, type a <controlD>.
   next host to add:  mgt01
   next host to add:         /这里按ctrl –d继续下面的操作
The current list of NISservers looks like this:
 
mgt01
 
Is this correct?  [y/n: y] y  /键入字母y
We need a few minutes tobuild the databases...
Building /var/yp/LIANXI/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory`/var/yp/LIANXI'
Updating passwd.byname...
Updating passwd.byuid...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updatingservices.byservicename...
Updating netid.byname...
Updatingprotocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory`/var/yp/LIANXI'
 
mgt01 has been set up as aNIS master server   /mgt01已经被设置为nis主服务器!.
 
Now you can run ypinit -smgt01 on all slave server.

在nis的客户端端设置:

 NIS client 端所需要的软件仅有:ypbind  yp-tools;同样若系统中没有这两个软件,则直接可以用yum install –y  yp* 安装!安装ypbind的时候,系统会自动把它的依赖包yp-tools安装上!

1》  然后我们可以在客户端配置,客户端配置有一个非常方便的办法就是,借助于setup工具,键入setup—>选择authentication configurationà选择nis—>在弹出的对话框中请务必填正确的领域名与服务器ip!

  2》  修改network内容,增加nisdomain;

[root@c0102 ~]# vim/etc/sysconfig/network
HOSTNAME=c0102
NETWORKING=yes
NISDOMAIN=LIANXI

[root@c0102~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4localhost4.localdomain4
::1         localhost localhost.localdomainlocalhost6 localhost6.localdomain6
10.1.1.114  mgt01 /前面的内容不要改动,直接在最后面加上ip地址与主机名/




4》设定nis server的域名和ip     

 [root@c0102 ~]# vim /etc/yp.conf
       domain  LIANXI  server  10.1.1.114/这个文件中的其余内容不要改变直接,在最后一行加入nis server的域名和ip地址/

5》设定账户信息读取顺序  

   [root@c0102 ~]# vim /etc/nsswitch.conf
            passwd:     files nis    /直接在后面加nis就i可以!
                    shadow:     files nis
                    group:      files nis

  6》启动相应的服务;并设定为开机启动!

[root@c0101~]# /etc/init.d/rpcbind  start
    [root@c0101~]# /etc/init.d/ypbind  start
        [root@c0101 ~]# chkconfig rpcbind on
        [root@c0101 ~]# chkconfig ypbind on

7》在客户端检测一下

[root@c0101 home]# yptest
Test 1: domainname
Configured domainname is"LIANXI"
 
Test 2: ypbind
Used NIS server: mgt01
 
Test 3: yp_match
WARNING: No such key in map(Map passwd.byname, key nobody)
 
Test 4: yp_first
user5 user5:$6$XmQ9zV10$jQBxzPoccWeuAN5bvfDupAkDfrJTTvyVKkFbZYzbCorjUIT8DLSBn7pN1GFNgZRbS0RBwbCNebvMdE.jPfJiJ0:504:504::/share/home/user5:/bin/bash
 
Test 5: yp_next
user3user3:$6$LYenxUyA$dsfLGF9t6td1S1ms4bHwMNmJO6AHrWqV3//S9tkYUTDeToFe/CJVkYTsohXv1Q1mzYUtWw7uqULbDYaiUk1aL/:502:502::/share/home/user3:/bin/bash
user1user1:$6$P5gKu3Nc$eWxdkvbUy0Q8ImcramScWTL5szsoXARxdpR3okTT//f0YCgFiobga9CfQpa18OSD9Lti5K2cLy6GDiRIlzhZQ0:500:500::/share/home/user1:/bin/bash
user4user4:$6$yCNy8J8U$4iY4yMbjd5d9g/ZGJ9fZIywWcIkF7.AOl/fOxLCLK9SrRKnXIjvMcbp13.0Sp/QFuVMbwpOPX9/SnskkJkKPw.:503:503::/share/home/user4:/bin/bash
user2user2:$6$WS5xCVGP$G9doYN4hAtOQDhgNxrPq6yk7EXvj.OFaNNKpVqrgcxIxlOZ2NAqP36MdTSVcrdCsmWXcCwAANQ/xiSlndLF7U/:501:501::/share/home/user2:/bin/bash
 
Test 6: yp_master
mgt01
 
Test 7: yp_order
1457533004
 
Test 8: yp_maplist
services.byname
mail.aliases
rpc.byname
passwd.byuid
passwd.byname
hosts.byname
ypservers
hosts.byaddr
protocols.byname
group.byname
group.bygid
netid.byname
protocols.bynumber
rpc.bynumber
services.byservicename
 
Test 9: yp_all
user5user5:$6$XmQ9zV10$jQBxzPoccWeuAN5bvfDupAkDfrJTTvyVKkFbZYzbCorjUIT8DLSBn7pN1GFNgZRbS0RBwbCNebvMdE.jPfJiJ0:504:504::/share/home/user5:/bin/bash
user3user3:$6$LYenxUyA$dsfLGF9t6td1S1ms4bHwMNmJO6AHrWqV3//S9tkYUTDeToFe/CJVkYTsohXv1Q1mzYUtWw7uqULbDYaiUk1aL/:502:502::/share/home/user3:/bin/bash
user1user1:$6$P5gKu3Nc$eWxdkvbUy0Q8ImcramScWTL5szsoXARxdpR3okTT//f0YCgFiobga9CfQpa18OSD9Lti5K2cLy6GDiRIlzhZQ0:500:500::/share/home/user1:/bin/bash
user4user4:$6$yCNy8J8U$4iY4yMbjd5d9g/ZGJ9fZIywWcIkF7.AOl/fOxLCLK9SrRKnXIjvMcbp13.0Sp/QFuVMbwpOPX9/SnskkJkKPw.:503:503::/share/home/user4:/bin/bash
user2user2:$6$WS5xCVGP$G9doYN4hAtOQDhgNxrPq6yk7EXvj.OFaNNKpVqrgcxIxlOZ2NAqP36MdTSVcrdCsmWXcCwAANQ/xiSlndLF7U/:501:501::/share/home/user2:/bin/bash
1 tests failed    从这个测试当中我们可以发现一些错误,就是在 Test 3 出现的那个警告信息啦。还好,那只是说没有该数据库而已~该错误是可以忽略的。重点在第 9 个步骤 yp_all 必须要有列出你 NIS server 上头的所有帐户信息,如果有出现账号相关数据的话,那么应该就算验证成功了!/

8》也可以用ypwhich检测一下:

[root@c0101 ~]# ypwhich   /会返回nis server 的主机名
mgt01  /nis服务器主机名

若想在一个机器上即设置成nis server和nis client;首先在机器上设置nis server的形式然后检测是否正确,若正确则按照设置nis client的步骤在其上面设置;设置完成之后,并且注意把客户端的服务加入开机启动!!!注意检测其正确性!

我们验证一下设置的nis的服务器:

 [root@c0101 ~]# su - user1
[user1@c0101~]$ pwd
/share/user1
[user1@c0101~]$ su - user2
Password:
[user2@c0101~]$

ssh无密码登录;


制作不用密码立即登入的ssh用户:

既然 SSH 可以使用密钥系统来比对数据,并且提供用户数据的加密功能,那么可不可能利用这个Key 就提供用户自己进入主机,而不需要输入密码呢?呵呵!好主意!我们可以将 Client 产生的 Key 给他拷贝到 Server 当中,所以, 以后 Client 登入 Server 时,由于两者在 SSH 要联机的讯号传递中,就已经比对过 Key 了, 因此,可以立即进入数据传输接口中,而不需要再输入密码呢!在实作上的步骤可以是:客户端建立两把钥匙:想一想,在密钥系统中,是公钥比较重要还是私钥比较重要?当然是私钥比较重要!因此私钥才是解密的关键啊!所以啰,这两把钥匙当然得在发起联机的客户端建置才对。利用的指令为ssh-keygen 这个命令;客户端放置好私钥档案:将 Private Key 放在 Client 上面的家目录,亦即 $HOME/.ssh/ , 并且得要注意权限!将公钥放置服务器端的正确目录与文件名去:最后,将那把 Public Key 放在任何一个你想要用来登入的服务器端的某 User 的家目录内之 .ssh/ 里面的认证档案即可完成整个程序。

接下来我们进行具体的操作步骤;

[root@c0101 ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /中间的步骤,可以按回车键继续!
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
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:
03:e5:bd:2e:ee:0d:4b:c1:8b:ed:09:5e:92:f3:7b:b5 root@c0101
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|        .        |
|       o .       |
|      . . .      |
|       o   .     |
|        S .      |
|       + =  .    |
|      * B .. .   |
|     . X *. E    |
|      ..Oo.      |
+-----------------+


利用scp命令,把本地产生的公匙传送到服务器上的,你要登录用户的家目录中:

scp~/.ssh/id_rsa.pub 
root@10.1.1.114:~

然后在主服务器端作如下设置:

[root@mgt01~]# mkdir .ssh   /创建一个.ssh目录
[root@mgt01~]# chmod 700 .ssh /修改目录权限为700
[root@mgt01~]# cat id_rsa.pub >> .ssh/authorized_keys  /把刚才传递过来的公匙放在authorized_keys中,注意文件名不要改变
[root@mgt01~]# chmod 644 .ssh/authorized_keys     /修改authorized_keys权限为644

然后在客户端重新登录一下。可以发现不需要密码:

[root@c0101~]# ssh mgt01
Lastlogin: Wed Mar  2 14:43:39 2016 fromc0102
[root@mgt01~]#

至此ssh无密码登录已经设置完成!

在有两台的情况下,我们可以这样操作,但是若有多台机器,我们怎么设置才能实现多个普通账户与ssh账户之间的互相不需要密码访问呢!

Eg:有主机mgt01  10.1.1.114

         C0101  10.1.1.115

          C0102 10.1.1.116

  还有三个普通用户,user1,user2,user3!我们要求是每一个用户包含root用户,可以无密码访问其它的主机:

1》   首先把我们的三个普通用户的家目录是共享在三台主机上的;由上面的nfs和nis服务可以知道!

2》   在mgt01主机上操作如下:

1
:[root@mgt01 ~]#ssh-keygen  /会在家目录下新建一个.ssh家目录,里面含有公钥和私钥,


2[user1@mgt01~]$cat .ssh/id_rsa.pub >>.ssh/authorized_keys   
/把公钥写入authorized_keys中;


3:修改权限,请务必操作这一步;万一你忘了文件的权限呢?即便你的文件权限本来没有问题,但这一步也不会起什么坏作用!

[root@mgt01 ~]#chmod 700 .ssh
[root@mgt01 ~]#chmod 644 .ssh/authorized_keys

4:以上步骤完成之后,我们可以验证一下:

[root@mgt01 ~]# sshlocalhost
Last login: Thu Mar 1010:20:00 2016 from c0102
[root@mgt01~]#

  [root@mgt01 ~]# scp -r  .ssh   c0101:///root/.ssh
[root@mgt01 ~]# scp    -r  .ssh   c0102:///root/.ssh

 在c0101上面验证:

[root@c0101 ~]# ssh mgt01
Last login: Thu Mar 1010:30:20 2016 from localhost
[root@mgt01 ~]# ssh c0101
Last login: Thu Mar 1010:19:37 2016 from c0101
[root@c0101 ~]#
[root@c0102 ~]# ssh mgt01
Last login: Thu Mar 1010:34:08 2016 from c0101
[root@mgt01 ~]# ssh c0101
Last login: Thu Mar 1010:34:11 2016 from mgt01
[root@c0101 ~]#
[user1@mgt01 ~]$ ssh-keygen
[user1@mgt01 ~]$ catid_rsa.pub >>authorized_keys
[user1@mgt01 ~]$chmod 644authorized_keys/一定要改权限;

[user1@mgt01 ~]$ ssh c0101
Last login: Thu Mar 1009:51:11 2016 from mgt01
[user1@c0101 ~]$ ssh c0102
Last login: Thu Mar 1009:51:22 2016 from c0101
[user1@c0102 ~]$