ssh,即Secure Shell,它是把所有传输的数据都进行了加密。它有两个版本,即1.x和2.x,其中只有Open SSh是免费的。从客户端来看,ssh有两种级别的安全验证,一是口令验证(只要你知道账户和密码,就能登录,并且所传输的数据都是加密的),二是密匙验证(自己为自己创建一对密匙,然后把公用密匙放到服务器上;如果你连接服务器的时候,客户端首先发送一个请求,里面包括公用密匙,请求服务器进行验证;服务器接收到请求之后,就会在自己的家目录下寻找你的密匙,与你发送过来的密匙进行比较,如果相同,服务器就会把自己的“质询”信息进行加密,发送给客户端;客户端接收到“质询”信息之后,就会用自己的私人密匙进行解密,然后把它发送给服务器)。
将客户机和服务器设置为互相信任关系,步骤如下:
(1)生成密匙
a)使用ssh-keygen -t rsa命令分别在客户机和服务器上生成一对密匙;
(2)分发公用密匙
a)将(1)中生成的公开密匙分别拷贝到对方的机器上,放到~/.ssh/目录下,文件名为authorized_keys,注意:此文件的权限必须为644.
问题:关于authorized_keys文件权限,许多网上的资料都说必须是600的权限才能够成功建立起信任关系,但是在我调试的时候,并不是这样的啊。我测试了644和600的权限,这两个的权限都是可以建立起信任关系的,只有当其拥有执行权限的时候,是不可以正确建立起信任关系的。
(3)配置ssh
a) 修改/etc/ssh/sshd_config文件,将如下前三行的注释去掉。
本机redhat6.3 32位的操作系统
对其他主机做信任,使本机登录其他主机不需要输入密码
1)先在本机用ssh-keygen -t rsa生成公钥,生成~/.ssh/id_rsa.pub公钥文件
2)
软件工具: sshpass,
使用root用户批量创建ssh信任关系:
从一台文件服务器上获取软件资源,活着scp传输到另外的主机上:
分发服务器上安装 sshpass软件工具 ftp://182.254.217.108/pub/soft/
解压文件,,进入解压后的文件夹
./configure
make && make install
安装好sshpass工具后,编写trust.sh 建立信任关系,这个脚本只要root用户执行过一次就可以不再执行了
3)把 StrictHostKeyChecking no加到/etc/ssh/ssh_config可以让ssh客户端自动接受新主机的hostkey,不用每次在ssh新主机时都自己输入yes
4)编写hostlist文件,里面列举了主机名(ip地址)和主机密码(主机名和密码之间用空格隔开),一行内只有一对主机名和密码
使用主机名密码下发:
5)执行批量建立主机信任关系的脚本trusthost.sh
- !/bin/bash
-
- #date:06-04-2013
- hosts=`sed '/^#/d' ~/trusthost/hostlist | awk '{print $1}'`
- id=`cat ~/.ssh/id_rsa.pub`
- for host in $hosts
- do
- ping -c 2 -W 1 $host
- if [ $? = 0 ]
- then
- passwd=`awk /$host/'{print $2}' ~/trusthost/hostlist`
- sshpass -p "$passwd" ssh $host "echo $id >>~/.ssh/authorized_keys"
- else
- echo "$host is lost" >~/trusthost/ssh.log
- fi
- done
使用密钥:
- ##引用配置文件,全局变量都存放在config文件中
- . config
- #======================
- # function -->Error_log
- #定义错误日志存放位置
- #======================
- Error_log()
- {
- if [ $? -eq 0 ]
- then
- echo "$1 $2 $3" >>$PWDDIR/$okLogfile
- else
- echo "$1 $2 $4" >>$PWDDIR/$errLogfile
- fi
- }
- #=================================
- # function --> Trust
- # 创建密钥登录环境
- #=============================
- Trust()
- {
- for ip in 15 17
- do
- ##批量创建zhangsan用户并赋予密码和.ssh文件夹
- sshpass -p aixocm ssh root@10.0.7.$ip -o StrictHostKeyChecking=no "useradd zhangsan && echo aixocm |passwd zhangsan --stdin && mkdir /home/zhangsan/.ssh/"
- Error_log sshsystem adduser [ok] [error]
- ##批量拷贝文件分发服务器上zhangsan用户的公钥认证文件给web层服务器
- sshpass -p aixocm scp /home/zhangsan/.ssh/authorized_keys root@10.0.7.$ip:/home/zhangsan/.ssh/authorized_keys
- Error_log sshsystem cpkey [ok] [error]
- ##由于是使用root用户传送的文件,需要使用root用户修改zhangsan家目录下的.ssh文件夹和公钥认证文件的权限和属主属组
- sshpass -p aixocm ssh root@10.0.7.$ip -o StrictHostKeyChecking=no "chown -R zhangsan:zhangsan /home/zhangsan/.ssh/ && chmod 600 /home/zhangsan/.ssh/authorized_keys"
- Error_log sshsystem changeprem [ok] [error]
- ##给web层zhangsan 用户赋予sudo权限便于日常管理,拷贝配置文件前先备份web层服务器上的源文件以便恢复
- sshpass -p aixocm ssh root@10.0.7.$ip -o StrictHostKeyChecking=no mv /etc/sudoers /etc/sudoers.bak
- sshpass -p aixocm scp /etc/sudoers root@10.0.7.$ip:/etc/sudoers
- Error_log sshsystem addsudo [ok] [error]
- done
- }
- Main()
- {
- Trust
- }
- Main;
https://my.oschina.net/u/1449160/blog/199771