使用expect

时间:2015-11-11 10:05:57

标签: ssh sh expect

我是Linux,Bash和Expect的新手

我目前正在开发一个自动化ssh-keygen和ssh-copy-id进程的脚本

这是想要的行为:

  • 从root用户创建SSH密钥,对于非root用户(rsa one)
  • 在给定的远程服务器上复制它们
  • 通过SSH,将远程主机的密钥ssh-copy-id返回给非root用户

基本上,要在它们之间创建无密码的ssh连接,所有这些连接都在主服务器上自动化。

我想避开" su nagios"命令,因为它会中断等待命令的脚本(或者如果它不正确,请帮我正确使用它。)

期望脚本:

#!/usr/bin/expect

set user [lindex $argv 0]
set server [lindex $argv 1]

send_user $user
send_user $server

spawn ssh-copy-id $user@$server
expect {
    "(yes/no)? " {
        send "yes\r"
        exp_continue
    }
    "password: " {
        send "nagios\r"
        send_user "\n"
    }
}

expect "$ "
spawn ssh -v $user@$server "ssh-copy-id nagios@192.168.174.142"
expect {
    "(yes/no)? " {
        send "yes\r"
        exp_continue
    }
    "password: " {
        send "nagios\r"
        send_user "\n"
    }
}
expect "$ "
exit

我想做的事情:

在右侧文件夹中创建密钥:

 ssh-keygen -t rsa -N "" -f /home/nagios/.ssh/id_rsa

更改有关用户和域的文字

sed -i s/"root@localhost.localdomain"/"nagios@localhost.localdomain"/g /home/nagios/.ssh/id_rsa.pub

然后我只是将它们复制为ssh-copy-id命令..

cp -Rfv /home/nagios/.ssh/id_rsa /root/.ssh/
cp -Rfv /home/nagios/.ssh/id_rsa.pub /root/.ssh/
  • 生成的密钥是否绑定给创建它们的用户?
  • 是" root@localhost.localdomain"只是一个"评论"正如我在网上浏览时读过的那样?
  • 有没有办法从root用户使用ssh-copy-id为非root用户?

我面临的错误:

/usr/bin/ssh-copy-id: ERROR: Host key verification failed.

expect: spawn id exp5 not open
while executing
"expect "$ ""
    (file "./copyRemoteKeys.sh" line 36)

有人可以帮助我调试,修复甚至帮助我更好地理解这些东西是如何工作的吗?

0 个答案:

没有答案