免费注册 查看新帖 |

Chinaunix

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

[系统管理] 【已解决】scp如何使用自动应答自动输入密码并实现多台服务器无密码ssh登录一台服务器 [复制链接]

求职 : 其它语言研发
论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-20 14:58 |只看该作者 |倒序浏览
本帖最后由 killedman 于 2014-03-20 20:26 编辑

在帖子http://bbs.chinaunix.net/thread-4132145-1-1.html使用ssh-keygen自动生成密钥;
接着要将公钥scp到目标服务器上,可以使用StrictHostKeyChecking=no的选项使scp加入know_hosts的提示不再出现;
接着会提示输入ssh目标服务器192.168.1.1的密码
  1. echo “passwd‘ |scp -oStrictHostKeyChecking=no test.txt  root@192.168.1.1:/root
复制代码
或者
  1. scp -oStrictHostKeyChecking=no test.txt  root@192.168.1.1:/root << EOF
  2. passwd
  3. EOF
复制代码
都不管用;
可以使用expect实现,但是想知道有没有别的办法?
------------------------------------------------
补充:看到大家的回复,看来是直接用shell没有办法实现我的需求了。于是用expect实现了一下。
  1. #!/usr/bin/expect
  2. set timeout 30
  3. #将ssh-keygen生成的公钥identity.pub发送到目的服务器相应文件
  4. spawn scp -oStrictHostKeyChecking=no /root/.ssh/identity.pub  root@192.168.2.1:/root/.ssh/authorized_keys
  5. expect "password:"
  6. send "passwd\r"
  7. interact
复制代码
但发现一个问题,如果同时批量操作的话,后面服务器的公钥会把前面的覆盖掉,而且都是同名文件,很容易发生提示覆盖的问题;
各位有什么高建吗?在所有服务器上同时执行该脚本,将公钥全部追加到一台服务器的/root/.ssh/authorized_keys中

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2014-03-20 15:00 |只看该作者
回复 1# killedman

sshpass
   

求职 : 其它语言研发
论坛徽章:
0
3 [报告]
发表于 2014-03-20 15:03 |只看该作者
回复 2# jason680
这个和expect一样,需要另外安装组件;

   

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
4 [报告]
发表于 2014-03-20 15:05 |只看该作者
本帖最后由 jason680 于 2014-03-20 15:06 编辑

回复 3# killedman

do it by yourself or assistant
   

论坛徽章:
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
5 [报告]
发表于 2014-03-20 16:37 |只看该作者
回复 3# killedman


    如果shell可以实现的话,scp就不应该叫做scp啦,s体现在什么地方呀

论坛徽章:
3
金牛座
日期:2013-08-26 10:25:02摩羯座
日期:2013-09-09 15:14:322015年亚洲杯之约旦
日期:2015-05-06 09:33:56
6 [报告]
发表于 2014-03-20 17:25 |只看该作者
嗯~~如果可以实现,那么用shell来破解密码也是不错的。

论坛徽章:
3
金牛座
日期:2013-08-26 10:25:02摩羯座
日期:2013-09-09 15:14:322015年亚洲杯之约旦
日期:2015-05-06 09:33:56
7 [报告]
发表于 2014-03-20 18:13 |只看该作者
本帖最后由 kooleon 于 2014-03-20 18:16 编辑
  1. #!/usr/bin/expect
  2. # file name :copy.exp
  3. # Usages : copy.exp  host.lst
  4. # Description : 打通ssh-key认证关系

  5. # 运行
  6. if { $argc != 1 } {
  7.     send_user "Usage:copy.exp host.lst\n"
  8.     exit
  9. }

  10. set host_list [lindex $argv 0]
  11. set info [open $host_list r]
  12. while { [gets $info line]>=0 } {
  13.     set host_ip [lindex $line 0]
  14.     spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $host_ip
  15.     expect {
  16.         "yes/no" {send "yes\r";exp_continue}
  17.         "*assword:" {send "youpasswd\r"}
  18.     }
  19.     expect eof
  20. }

  21. exit
复制代码
其实为什么要用scp呢?用ssh-copy-id不是很好么?

我这有个现成的,如果是多个的话,就在host.lst里写多个IP,如果是一个就写一个就行。
目测你是多台到一台。我这个是一台到多台。你修改修改,就可以用了。

求职 : 其它语言研发
论坛徽章:
0
8 [报告]
发表于 2014-03-20 18:41 |只看该作者
回复 7# kooleon


使用的发行版上都没有ssh-copy-id;所有还是想用一些通用的命令来实现这个需求;

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
9 [报告]
发表于 2014-03-20 18:57 |只看该作者
如果可以用telnet的话就可以 telnet当桥, 吃的时候支持各种标准输入,拉出来就变tty了

求职 : 其它语言研发
论坛徽章:
0
10 [报告]
发表于 2014-03-20 20:21 |只看该作者
shell知识太差,苦熬一天终于有了一个满足基本需求的脚本,可以回家休息了!
  1. #!/bin/bash
  2. #write by yp at 2014-3-20
  3. #获取本机ip地址
  4. ipaddr=`/sbin/ifconfig|grep -n1 "Scope:Link" |grep 192.168|awk '/inet addr/ {print $3}'| cut -f2 -d":"|head -1`
  5. #使用ssh-keygen生成密钥,路径为默认路径,空密码
  6. ssh-keygen  -t rsa -P '' -f /root/.ssh/identity
  7. mv /root/.ssh/identity.pub /root/.ssh/identity.pub_$ipaddr

  8. expect << EOF
  9. set timeout 30
  10. #将ssh-keygen生成的公钥identity.pub发送到目标服务器响应文件
  11. spawn scp -oStrictHostKeyChecking=no /root/.ssh/identity.pub_$ipaddr  root@192.168.2.1:/root/.ssh/
  12. expect "password:"
  13. #服务器密码是passwd
  14. send "passwd\r"
  15. expect eof
  16. EOF

  17. #使用ssh登录到目的服务器
  18. expect << EOF
  19. spawn ssh  root@192.168.2.1
  20. expect "password:"
  21. send "passwd\r"
  22. expect "*#*" {send "cat /root/.ssh/identity.pub_* >> /root/.ssh/authorized_keys\r"}
  23. expect "*#*" {send "rm -rf /root/.ssh/identity.pub_*\r"}
  24. expect eof
  25. EOF
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP