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文件,将如下前三行的注释去掉。
1.实现环境:
本机redhat6.3 32位的操作系统
2.实现目的:
对其他主机做信任,使本机登录其他主机不需要输入密码
3.实现过程:
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