免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6386 | 回复: 21
打印 上一主题 下一主题

[系统管理] 求一个脚本 [复制链接]

论坛徽章:
3
天秤座
日期:2014-10-29 11:37:572015元宵节徽章
日期:2015-03-06 15:50:39NBA常规赛纪念章
日期:2015-05-04 22:32:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-12 11:21 |只看该作者 |倒序浏览
30可用积分
本帖最后由 tomer 于 2013-03-29 15:45 编辑

   条件:有n台主机,这n台主机的IP,用户名/密码已知
   需一脚本,在这n台主机中的一台运行,运行后的结果是:这n台主机随便俩俩都互信,也就是说ssh登录不需要密码
   
   这位领导的脚本被证实是好用的,但需要略作一下修改,chmod 700 ~/.ssh;这样就完美了

最佳答案

查看完整内容

在RHEL6.0上openssh实现,未考虑移植性.另外,欢迎大家提出问题与改进意见.说明(1)思路很简单,就是共享公钥,语言用expect(2)selinux要关闭,原因待探讨(3)不能用于已经存有ssh认证的机器上,否则会覆盖原先的认证(4)此脚本不一定要在内部结点上运行,也可以在认证群组之外的主机上执行(5)认证没有passphrase用法:sh scriptFile -f hostFile其中hostFile格式为IP1 user1 pass1 FQDN1IP2 user2 pass2 FQDN2...

论坛徽章:
0
2 [报告]
发表于 2013-03-12 11:21 |只看该作者
本帖最后由 iamhere2007 于 2013-03-21 07:03 编辑

在RHEL6.0上openssh实现,未考虑移植性.另外,欢迎大家提出问题与改进意见.
说明(1)思路很简单,就是共享公钥,语言用expect(2)selinux要关闭,原因待探讨(3)不能用于已经存有ssh认证的机器上,否则会覆盖原先的认证(4)此脚本不一定要在内部结点上运行,也可以在认证群组之外的主机上执行(5)认证没有passphrase

用法:sh scriptFile -f hostFile
其中hostFile格式为
IP1   user1   pass1   FQDN1
IP2   user2   pass2   FQDN2
.
.
.
  1. #!/bin/sh
  2. ####################################
  3. #OS:RHEL 6.0
  4. #Packages needed:expect;openssh,openssh-clients,openssh-server
  5. #Some warnings:
  6. #(1)rsa type is chosen,which,howerer,can be changed by modifying the script or by providing some available options in future improvements
  7. #(2)No ever .ssh direcotry should exist, or the previous key pairs will be destroyed
  8. #(3)selinux should be set permissively,and the reason still needs investigation
  9. #(4)The script doesn't have to be executed in one of the internal node, but also functions well in external host
  10. #####################################


  11. #arguments processing
  12. usage()
  13. {
  14.       cat<<EOF
  15.               Usage:  $0 -f hostListFile
  16.                       $0 -h
  17. EOF
  18.       exit 1
  19. }

  20. if [ $# -eq 0 ]
  21. then
  22.     usage
  23. fi
  24. while getopts :f:h option
  25. do
  26.      case "$option" in
  27.      h)
  28.         uage
  29.         ;;
  30.      f)
  31.         hostFile=$OPTARG;
  32.         ;;
  33.      *)
  34.         echo "invalid option"
  35.         usage
  36.         ;;
  37.      esac
  38. done

  39. if [ -z $hostFile ]
  40. then
  41.     usage
  42. fi



  43. echo "script starts to execute..."
  44. echo "gererating keys and some preparation..."
  45. mkdir keys
  46. while read IP user _ hostname
  47. do
  48.    ssh-keygen -t rsa -P "" -f keys/$IP
  49.    sed -i "s/ [^ ]\+$/ ${user}@$hostname/" keys/${IP}.pub
  50.    cat keys/${IP}.pub>>keys/commonKeys
  51.    
  52.    echo $IP>>IPs  #IPs is temporary file for storing IP lists to be used by
  53.                   #ssh-keyscan
  54. done< $hostFile >/dev/null 2>&1


  55. #using environment variables simply for feeding shell variable to expect
  56. export commonKeys=`cat keys/commonKeys`
  57. export knownHosts=`ssh-keyscan -t rsa -f IPs 2>/dev/null` #``only capture the stard output

  58. echo -e "gererating keys and all preparation completed successfully!\n"



  59. while read f1 f2 f3 _
  60. do
  61.    echo "authenticating for host $f1..."

  62.    export IP="$f1"
  63.    export user="$f2"
  64.    export pass="$f3"
  65.    export public=`cat keys/${IP}.pub`
  66.    export private=`cat keys/$IP`

  67.    expect -c '
  68.                    log_file expect.log
  69.                    log_user 0
  70.                   
  71.                    set prompt "(%|#|\\$) $"
  72.                    set IP $env(IP)
  73.                    set user $env(user)
  74.                    set pass $env(pass)
  75.                   
  76.                    spawn -noecho ssh $user@$IP
  77.                    expect {
  78.                              "(yes/no)\?" { send "yes\r";exp_continue;}
  79.                              "password:" {send "$pass\r"}
  80.                    }
  81.                   
  82.                    #manully build the ~/.ssh directory
  83.                    expect -re "$prompt" {
  84.                            send "if \[ ! -e ~/.ssh \];then mkdir ~/.ssh;fi;echo \"$env(public)\">~/.ssh/id_rsa.pub;echo \"$env(private)\">~/.ssh/id_rsa;echo \"$env(commonKeys)\">~/.ssh/authorized_keys\r"
  85.                    }
  86.                    expect -re "$prompt" {
  87.                            send "ssh-keyscan -t rsa localhost>~/.ssh/known_hosts;echo \"$env(knownHosts)\">>~/.ssh/known_hosts;chmod 600 ~/.ssh/*\r"
  88.                    }
  89.                    expect -re "$prompt" exit
  90.    '
  91.    echo "authentication for host $IP completed successfully!";
  92. done<$hostFile

  93. #trace cleaning
  94. rm -rf keys
  95. rm -f IPs
  96. unset IP
  97. unset user
  98. unset pass
  99. unset public
  100. unset private

  101. unset knownHosts
  102. unset commonKeys
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
3 [报告]
发表于 2013-03-12 14:32 |只看该作者
光是这功能说明就听起来很牛B啊!坐等高人接分。

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
4 [报告]
发表于 2013-03-12 17:00 |只看该作者
本帖最后由 Shell_HAT 于 2013-03-12 17:01 编辑

expect + ssh 自动建立双机信任关系
http://blog.chinaunix.net/uid-10038128-id-2759648.html
http://bbs.chinaunix.net/thread-3625109-1-1.html

论坛徽章:
71
15-16赛季CBA联赛之同曦
日期:2018-08-23 15:41:42辰龙
日期:2014-08-15 09:07:43狮子座
日期:2014-06-03 13:55:33亥猪
日期:2014-06-02 11:17:08巨蟹座
日期:2014-05-06 10:02:03午马
日期:2014-05-04 08:18:27亥猪
日期:2014-04-29 11:11:32技术图书徽章
日期:2014-04-24 15:51:26技术图书徽章
日期:2014-04-17 11:01:53辰龙
日期:2014-04-15 12:45:46亥猪
日期:2014-04-11 09:06:23射手座
日期:2014-04-01 15:28:10
5 [报告]
发表于 2013-03-12 17:34 |只看该作者
本帖最后由 zhaopingzi 于 2013-03-12 17:37 编辑

回复 3# Shell_HAT


楼主要求的是多机,GP有一个类似的功能,里面有一个gpssh-exkeys命令,很好用!!

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
6 [报告]
发表于 2013-03-12 17:57 |只看该作者
回复 3# Shell_HAT


    其实你回过lz了,他不是也自己努力了一下,然后想想,还是直接“悬赏”比较厉害。

论坛徽章:
60
20周年集字徽章-20	
日期:2020-10-28 14:04:3015-16赛季CBA联赛之北京
日期:2016-07-06 15:42:0715-16赛季CBA联赛之同曦
日期:2016-06-12 10:38:0915-16赛季CBA联赛之佛山
日期:2016-05-27 11:54:56黄金圣斗士
日期:2015-12-02 11:44:35白银圣斗士
日期:2015-11-25 14:32:43白银圣斗士
日期:2015-11-23 12:53:352015亚冠之布里斯班狮吼
日期:2015-10-21 16:55:482015亚冠之首尔
日期:2015-09-01 16:46:052015亚冠之德黑兰石油
日期:2015-08-31 11:39:192015亚冠之萨济拖拉机
日期:2015-08-28 21:06:5315-16赛季CBA联赛之广东
日期:2016-07-12 14:58:53
7 [报告]
发表于 2013-03-12 19:28 |只看该作者
配置ssh key,打开每台主机的代理转发功能可以么?

论坛徽章:
3
天秤座
日期:2014-10-29 11:37:572015元宵节徽章
日期:2015-03-06 15:50:39NBA常规赛纪念章
日期:2015-05-04 22:32:03
8 [报告]
发表于 2013-03-13 09:01 |只看该作者
回复 6# reyleon


只要能实现,就行,最好简单一些;我原来的思路是把所有的机器的公钥都弄到一个文件authorized_keys里,然后把这个文件再弄到其他的机器里;
但是水平有些,代码写不出来。
   

论坛徽章:
0
9 [报告]
发表于 2013-03-13 09:09 |只看该作者
mark 学习

论坛徽章:
0
10 [报告]
发表于 2013-03-13 12:58 |只看该作者
本帖最后由 FaintKnowledge 于 2013-03-13 13:11 编辑

回复 1# tomer


pssh -h host_file "cmd"
pscp ......
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP