【问题标题】:Linux - Bash & ExpectLinux - Bash 和期望
【发布时间】:2015-06-06 07:36:59
【问题描述】:

我使用 expect 将我的密钥复制到远程 linux 盒子。

copy_key

#!/usr/bin/expect

stty echo 
set REMOTEhost [lindex $argv 0]
set REMOTEpass [lindex $argv 1]

spawn ssh-copy-id -i /home/myuser/mykey.pub root@$REMOTEhost

expect "password: "

send "$REMOTEpass\n"

sleep 2

这是通过./copy_key 1.1.1.1 GENERATED_PASSWORD调用的

我想将所有这些迁移到 bash 脚本中。

类似下面的东西,当然是不同的,但只是为了帮助一个想法:

#!/bin/bash
/usr/bin/expect -c 'expect "\n" { eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com; interact }'

这不起作用

#!/bin/bash
ssh-copy-id -i /home/myuser/mykey.pub root@$REMOTEhost

我该怎么做?

【问题讨论】:

  • 您想要摆脱期望,或者出于某种原因想要将其包装在 shell 脚本中?为什么?
  • 我尝试摆脱它,但它不起作用。它需要适应。这是一项要求,因此所有内容都必须在同一个 bash 脚本上。
  • 目前您只有一个期望脚本。您想用 没有 的 bash 脚本替换它吗?还是使用期望的 bash 脚本?具体要求是什么?

标签: linux bash ssh expect


【解决方案1】:

这将是 1:1 bash 脚本:

#!/bin/bash
stty echo && expect -c "spawn ssh-copy-id -i /home/myuser/mykey.pub root@$1; expect \"password: \"; send \"$2\r\"; sleep 2;"

【讨论】:

  • $1 和 $2 是参数,所以它会像下面这样? stty echo && expect -c "spawn ssh-copy-id -i /home/myuser/mykey.pub root@$REMOTEhost; 期待 \"password: \"; 发送 \"$REMOTEpass\r\"; sleep 2;" ?
  • 如果期望的例子对你有用,那么这个也应该有用。
  • 前面需要“/usr/bin/expect”吗? /usr/bin/expect stty echo && expect -c "spawn ssh-copy-id -i /home/myuser/mykey.pub root@$REMOTEhost; 期望 \"password: \"; 发送 \"$REMOTEpass\r\ “;睡眠 2;”
  • 如果您正在创建 bash 脚本,则将 which bash 的输出放在其标题中。如果which expecttype expect 返回根文件系统中的期望路径,那么您不需要在提供的示例中将期望替换为/path/to/expect。没有任何期望相关的东西应该留在单线前面。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-20
相关资源
最近更新 更多