免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: bikkuri
打印 上一主题 下一主题

[系统管理] 如何自动批量建立Linux服务器之间的信任关系? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-07-31 16:36 |只看该作者
回复 7# Shell_HAT


    这个不错,貌似要研究研究

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
12 [报告]
发表于 2014-07-31 16:40 |只看该作者
谢谢。
转帖到这里:
  1. #!/bin/sh

  2. ################################################################################################################
  3. ### makedate:2011-09-09                                                                                      ###
  4. ### Licensed Materials - Property of vsyour Technologies Co., Ltd.                                           ###
  5. ### http://eggic.com                                                                                         ###
  6. ### admin@eggic.com                                                                                          ###
  7. ### release 1.0                                                                                              ###
  8. ### Copyright 2010-2012 Support Engineers.                                                                   ###
  9. ### All rights reserved.                                                                                     ###
  10. ###建立:                                                                                                    ###
  11. ###user:vsyour                                                                                               ###
  12. ###ATCAX86_F0S0:172.16.128.0                                                                                ###
  13. ###ATCAX86_F0S1:172.16.128.8                                                                                ###
  14. ###                                                                                                          ###
  15. ###步骤:                                                                                                    ###
  16. ###1、在自己单板生成密钥。                                                                                   ###
  17. ###ssh-keygen -t dsa -N "" -f /home/vsyour/.ssh/id_dsa                                                       ###
  18. ###2、把自己的公钥拷到对方单板。(可以不用密码连到对方了)                                                   ###
  19. ###scp /home/vsyour/.ssh/id_dsa.pub 172.16.128.0:/home/vsyour/.ssh/authorized_keys2                          ###
  20. ###3、连到对方单板生成密钥。                                                                                 ###
  21. ###ssh 172.16.128.0 "ssh-keygen -t dsa -N \"\" -f /home/vsyour/.ssh/id_dsa"                                  ###
  22. ###4、把对方单板的公钥拷回来。                                                                               ###
  23. ###scp 172.16.128.0:/home/vsyour/.ssh/id_dsa.pub /home/vsyour/.ssh/authorized_keys2                          ###
  24. ###                                                                                                          ###
  25. ###考虑到的问题:                                                                                            ###
  26. ###1、root用户目录生成KEY的目录与普通用户不一样。                                                            ###
  27. ###2、当前用户如果是root用户,则需切换到要生成的用户进行密钥生成。                                           ###
  28. ###3、生成时一些需要交互的情况                                                                               ###
  29. ###4、拷文件到对方单板时如果对方没有.ssh目录,必须先成生一个。这个问题可以先交互连过去生成一下对方的密钥。   ###
  30. ###5、如果用户不相同的情况下,需要在scp文件时增加一个用户名,否则拷不过去                                    ###
  31. ###使用方法:fast_trust.sh 本地用户名 远程用户名 远程密码 远程ip                                             ###
  32. ###      如:fast_trust.sh vsyour vsyour vsyour 172.16.128.0                                                 ###
  33. ###         注意:如果远程用户名与本地不相同测试连接时需要增加一个用户名如ssh vsyour1@172.16.128.0           ###
  34. ################################################################################################################

  35. declare FBS_SH_NAME=fast_trust
  36. declare local_user=${1:-root} #要创建本地哪个用户与对方的双机信任关系。如果为空默认为root
  37. declare remote_user=${2:-root} #远程需要建立双机信任的用户,默认为root                     
  38. declare remote_password=${3:-huawei}   #远程用户的密码                                                        
  39. declare remote_ip=${4} #远程需要建立双机信任的ip地址                                                
  40. declare LOG=/tmp/trust_vsyour.log

  41. # 设置打印元素,颜色、格式等
  42. # 使用说明:使用printf或者echo “<颜色/格式><字符串><FBS_CLOSED>”
  43. declare FBS_ESC=`echo -en "\033"`;
  44. declare FBS_EXTD="${FBS_ESC}[1m";

  45. declare FBS_WARN="${FBS_ESC}[1;31m";    # warning,红色
  46. declare FBS_DONE="${FBS_ESC}[1;32m";    # done,绿色
  47. declare FBS_ATTN="${FBS_ESC}[1;33m";    # attention,黄色
  48. declare FBS_HELP="${FBS_ESC}[1;36m";    # help,高亮明蓝色
  49. declare FBS_PROMPT="${FBS_ESC}[1;37m";  # prompt,高亮白色
  50. declare FBS_HEAD="${FBS_ESC}[7;37m";    # head,高亮白色,反显
  51. declare FBS_CLOSED="${FBS_ESC}[0m";     # 颜色设置结束符号
  52. declare FBS_NORM=`echo -en "${FBS_ESC}[m\017"`
  53. declare FBS_STAT=`echo -en "\015${FBS_ESC}[${COLUMNS}C${FBS_ESC}[10D"`

  54. # 参数(2): 大小,以K为单位,默认为1M
  55. declare -i l_logSize=1024;

  56. #先判断日志文件是否存在,再取日志的大小,
  57. #如果大于1G就检测日志备份文件是否存在,
  58. #如果存在就把备份删掉再改名成日志备份名字。
  59. #否则把日志直接改名。
  60. if [ -f ${LOG} ];then
  61.         logsum=`du -sk ${LOG} |awk '{print $1}'`
  62.         #1M后把日制备份
  63.         if [ "${logsum}" -gt "${l_logSize}" ];then
  64.                 if [ -f ${LOG}_bak ];then
  65.                           rm -rf ${LOG}_bak;
  66.                           mv ${LOG} ${LOG}_bak;
  67.                         else
  68.               mv ${LOG} ${LOG}_bak;
  69.           fi
  70.         fi
  71. fi;

  72. ######################################################################
  73. #
  74. #   FUNCTION   : usage
  75. #   DESCRIPTION: 打印帮助信息
  76. #   CALLS      : NA
  77. #   CALLED BY  : NA
  78. #   INPUT      : 参数1: 无
  79. #   OUTPUT     : NA
  80. #   USE GLOBVAR: NA
  81. #   RETURN     : 0: 成功
  82. #   OTHERS     : 从该函数不可以退出脚本
  83. #
  84. ######################################################################
  85. function usage ()
  86. {
  87.     # 打印帮助信息,但不退出
  88.     echo "\
  89. Usage:  ./${FBS_SH_NAME}.sh  <local user> <remote user> <remote password> <remote ip>

  90. Arguments:
  91.     <local user>         local user
  92.     <remote user>        remote user
  93.     <remote password>    user's password
  94.     <remote ip>          IP address
  95. ";
  96.    
  97.     return 0;
  98. }

  99. #生成KEY函数,传用户名进来并按用户生成密钥。此函数仅生成本地的key
  100. function make_local_key()
  101. {
  102.        
  103.         echo "`date +%Y-%m-%d\ %H:%M:%S` Start function make_local_key ,opt is :$@" >>${LOG} 2>&1;
  104.         #先判断传进来的用户是不是root用户。如果不是root则把双机信任文件生成到home目录下
  105. if [ ${1} == "root" ];then
  106.             local_key_path=/root/.ssh/id_dsa
  107.           else
  108.             local_key_path=/home/${1}/.ssh/id_dsa
  109. fi
  110.        
  111. #判断本地的当前用户是不是与传过来的用户相同,如果相同则不切换生成。
  112. if [ `whoami` == ${1} ];then            
  113.         /usr/bin/expect <<EOF
  114.   spawn ssh-keygen -t dsa -N "" -f ${local_key_path}
  115.   set timeout 30
  116.   expect "*Overwrite*" { send "y\n" }
  117.   expect "*fingerprint*" { exit 0 }
  118.   expect eof             { exit 0 }
  119. EOF

  120. else            

  121. /usr/bin/expect <<EOG
  122.   spawn su - ${1} -c "ssh-keygen -t dsa -N \"\" -f ${local_key_path}"
  123.   set timeout 30
  124.   expect "*Overwrite*" { send "y\n" }
  125.   expect "*fingerprint*" { exit 0 }
  126.   expect eog             { exit 0 }
  127. EOG

  128. fi
  129.                        
  130. }

  131. #-----------------------------------------------------------------------
  132. #        
  133. # make_remote_key生成远程密钥
  134. #-----------------------------------------------------------------------

  135. function make_remote_key()
  136. {

  137.         echo "`date +%Y-%m-%d\ %H:%M:%S` Start make_remote_key  ,opt is :$@" >>${LOG} 2>&1;
  138.         #先判断传进来的用户是不是root用户。如果不是root则把双机信任文件生成到home目录下
  139. if [ ${2} == "root" ];then
  140.             remote_key_path=/root/.ssh/id_dsa
  141.           else
  142.             remote_key_path=/home/${2}/.ssh/id_dsa
  143. fi
  144.        
  145. #连过去把密钥生成一次
  146.   /usr/bin/expect <<EOH
  147.   spawn ssh -q ${2}@${1} "ssh-keygen -t dsa -N \"\" -f ${remote_key_path};echo \"vsyour\""
  148.   set timeout 30
  149.   expect "*yes/n*" { send "yes\n" }
  150.   expect "*password:*" { send "$3\n" }
  151.   expect "*Overwrite*" { send "y\n" }
  152.   expect "*fingerprint*" { exit 0 }
  153.   expect eoh             { exit 0 }
  154. EOH

  155. }

  156. #-----------------------------------------------------------------------
  157. #        
  158. # copy_key 复制钥密
  159. #-----------------------------------------------------------------------
  160. function copy_key()
  161. {
  162.        
  163.         echo "`date +%Y-%m-%d\ %H:%M:%S` Start copy_key  ,opt is :$@" >>${LOG} 2>&1;

  164. #算出远程路径       
  165. if [ ${3} == "root" ];then
  166.           remote_key_path=/root/.ssh/id_dsa >>${LOG} 2>&1;
  167.   else
  168.           remote_key_path=/home/${3}/.ssh/id_dsa >>${LOG} 2>&1;
  169. fi


  170. #先判断传进来的用户是不是root用户。如果不是root则把双机信任文件生成到home目录下
  171. if [ ${1} == "root" ];then
  172.     local_key_path=/root/.ssh/id_dsa >>${LOG} 2>&1;
  173.   else
  174.     local_key_path=/home/${1}/.ssh/id_dsa >>${LOG} 2>&1;
  175. fi

  176. #把自己的key拷到对方单板
  177. tmp_path=`dirname ${remote_key_path}`/authorized_keys2
  178.   /usr/bin/expect <<EOI
  179.   spawn scp ${local_key_path}.pub ${3}@${2}:${tmp_path}
  180.   set timeout 30
  181.   expect "*yes/n*" { send "yes\n" }
  182.   expect "*password:*" { send "$3\n" }
  183.   expect "*Overwrite*" { send "y\n" }
  184.   expect "*fingerprint*" { exit 0 }
  185.   expect eoi             { exit 0 }
  186. EOI

  187. #把对方单板的KEY拷回来
  188. tmp_path=`dirname ${local_key_path}`/authorized_keys2
  189.   /usr/bin/expect <<EOK
  190.   spawn scp ${3}@${2}:${remote_key_path}.pub ${tmp_path}
  191.   set timeout 30
  192.   expect "*yes/n*" { send "yes\n" }
  193.   expect "*password:*" { send "$3\n" }
  194.   expect "*Overwrite*" { send "y\n" }
  195.   expect "*fingerprint*" { exit 0 }
  196.   expect eok             { exit 0 }
  197. EOK

  198. }



  199. #-----------------------------------------------------------------------
  200. #                         Main
  201. # 正式开始运行脚本
  202. #-----------------------------------------------------------------------
  203. if [ $# -le 1 ];then
  204.   usage;
  205.   exit 1;
  206. fi
  207.        
  208. echo "`date +%Y-%m-%d\ %H:%M:%S` Start script===================================================" >>${LOG} 2>&1;
  209. echo "${FBS_DONE}`date +%Y-%m-%d\ %H:%M:%S` Now Start script ${FBS_CLOSED}"

  210. make_local_key ${local_user} >/dev/null 2>&1;
  211. echo "`date +%Y-%m-%d\ %H:%M:%S` Start make_local_key  ,the result is :$?" >>${LOG} 2>&1;
  212. echo "${FBS_DONE}`date +%Y-%m-%d\ %H:%M:%S` Now runing make_local_key ${FBS_CLOSED}"



  213. make_remote_key ${remote_ip} ${remote_user} ${remote_password} >/dev/null 2>&1;
  214. echo "`date +%Y-%m-%d\ %H:%M:%S` Start make_remote_key  ,the result is :$?" >>${LOG} 2>&1;
  215. echo "${FBS_DONE}`date +%Y-%m-%d\ %H:%M:%S` Now runing make_remote_key ${FBS_CLOSED}"



  216. copy_key ${local_user} ${remote_ip} ${remote_user} ${remote_password} >/dev/null 2>&1;
  217. echo "`date +%Y-%m-%d\ %H:%M:%S` Start copy_key  ,the result is :$?" >>${LOG} 2>&1;
  218. echo "${FBS_DONE}`date +%Y-%m-%d\ %H:%M:%S` Now runing copy_key ${FBS_CLOSED}"



  219. echo "`date +%Y-%m-%d\ %H:%M:%S` ok The script is run End========================================" >>${LOG} 2>&1;
  220. echo "${FBS_DONE}`date +%Y-%m-%d\ %H:%M:%S` ok The script is run End${FBS_CLOSED}"
复制代码
Shell_HAT 发表于 2014-07-31 16:17
http://blog.chinaunix.net/uid-10038128-id-2759648.html

论坛徽章:
0
13 [报告]
发表于 2014-07-31 22:49 |只看该作者
1 在一台机器上执行ssh-keygen 生成密钥对。
2 将公钥追加到authorized_keys文件中。
3 写个循环用expect自动输入ssh密码(假设这20台机器密码都一样),将这台机器的.ssh目录整个scp到目标机的/root目录下。
4 执行ssh -o StrictHostKeyChecking=no 连接到各机器上,将/etc/ssh/ssh_config中的StrictHostKeyChecking项改为no。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
14 [报告]
发表于 2014-08-01 10:16 |只看该作者
再说个可行的方案,在pxe/kickstart的时候post-install部分把key放进去,然后在ssh simulator设备如secure CR/putty打开转发,就可以了。

论坛徽章:
2
金牛座
日期:2013-09-06 09:16:182015年迎新春徽章
日期:2015-03-04 09:53:17
15 [报告]
发表于 2014-08-01 11:15 |只看该作者
回复 3# reyleon
能详细一点吗?

   

论坛徽章:
0
16 [报告]
发表于 2014-08-01 11:41 |只看该作者
expert1 发表于 2014-08-01 10:16
再说个可行的方案,在pxe/kickstart的时候post-install部分把key放进去,然后在ssh simulator设备 ...

这个主意不错,能具体说下嘛?

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
17 [报告]
发表于 2014-08-01 12:41 |只看该作者
ks.cfg部分可以把key cat到authorized_keys里面去,这个key可以用ssh终端生产。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
18 [报告]
发表于 2014-08-01 12:58 |只看该作者
  1. 748 groupadd -g 500 dba
  2. 749 useradd -u 500 -c 'dba system' -d /opt/dba -g 500 dba
  3. 750 chmod 750 /opt/dba
  4. 751
  5. 752 mkdir /opt/dba/.ssh
  6. 753
  7. 754 cat <<- EOF > /opt/dba/.ssh/authorized_keys2
  8. 755         ssh-dss AAAAB3NzaC1kc3MAAACBAJPq3HFEfXbj87jlqs7Vr6VxeDadJcLsyZbloYVKPCsXzICHjijgsMWnDd9YCqbn23Xa5Sca/OE0gAorS60JuRXE1PKwThzwMqUBwm6U+OP/kgRSy5Aw     1R9Rrm5gtO5YYrvMWLy4BNptW8RyxWo8tlaNWw/9UxvchmderigMD3n3AAAAFQDyDvhIcHcBuwnSNF5pkiFXUeWR6QAAAIBVhLVSFndf0IX/DM3hEwV3NykOPBn6v+xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/wAPE4mREJK25VpHkW9DQWKKRWf/fS13XTh0gQ1i/i3aRDqTJ4a9mNbSoft48Rzl3MGYj+5pobe6oArs7nbO7vpwp4goTYdCRm9r5BYg/ToDCRE=
  9. 756 EOF
复制代码
回复 16# 芬达7402

ks.cfg的%post部分,至于这个key可以搜ssh用证书认证部分,我这里用的是dsa密钥,然后禁止root登录,机器pxe安装完毕就可以用证书了,外加agent forward,到哪里都不需要密码。


   

论坛徽章:
0
19 [报告]
发表于 2014-08-01 13:58 |只看该作者
谢谢楼上解答,一直知道post部分很强大,可以配合脚本做很多初始化机器的工作。但一直没实践过,汗颜。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP