当前位置: 首页 > 面试题库 >

在bash脚本中使用Expect为SSH命令提供密码

阳文轩
2023-03-14
问题内容

对于那些想回复我应该使用SSH密钥的人,请弃权

我试图在bash脚本中使用Expect提供SSH密码。提供密码是可行的,但是我并没有像我应该的那样最终进入SSH会话,它将回溯到bash。

我的剧本:

#!/bin/bash

read -s PWD

/usr/bin/expect <<EOD
spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com'
expect "password"
send "$PWD\n" 
EOD
echo "you're out"

我的脚本的输出:

spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
usr@$myhost.example.com's password: you're out

我想拥有我的SSH会话,并且只有在退出该会话后才能返回我的bash脚本。我之所以使用bash,是因为我使用了可以选择要连接到的设备的菜单。

谢谢


问题答案:

混合bash和Expect不是达到预期效果的好方法。我会尝试仅使用Expect:

#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com
#use correct prompt
set prompt ":|#|\\\$"
interact -o -nobuffer -re $prompt return
send "my_password\r"
interact -o -nobuffer -re $prompt return
send "my_command1\r"
interact -o -nobuffer -re $prompt return
send "my_command2\r"
interact

bash的示例解决方案可能是:

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

这将等待进入并返回(暂时)交互式会话。



 类似资料:
  • 问题内容: 因此,我试图制作一个bash脚本,该脚本调用此命令,然后将其输入。它调用此命令,此命令之后需要3-4个输入。我键入命令,它等待我输入名字,一个我输入名字,它等待我输入名字,依此类推。如何使用bash脚本一次将这些参数传递给命令? 问题答案: 几种方法。 分组所有echo命令并将它们通过管道传递给命令: 或使用heredoc:

  • 问题内容: 我有一个python脚本,该脚本在运行时会在终端上记录信息,我想将此记录信息发送到文本文件, 为了实现这一点,我正在插入文件 在文件末尾,我放入 问题是当它调用第一个命令时,它将终止脚本, 提前感谢我如何做这项工作的任何建议 问题答案: 问题在于,直到退出产生的外壳程序才返回,这时您的Python脚本将恢复。 执行所需操作的最简单方法是使用Python脚本作为参数来调用自身。代替 您将

  • 本文向大家介绍bash脚本中将密码传递给ssh/scp命令方法详解,包括了bash脚本中将密码传递给ssh/scp命令方法详解的使用技巧和注意事项,需要的朋友参考一下 安装SSHPASS 对于大多数最新的操作系统,sshpass软件包在默认软件包存储库中可用。可以使用以下命令在系统上安装它。 在Debian上: $ sudo apt install sshpass 在CentOS上: $ yum

  • 问题内容: 我正在尝试使用命令记录bash会话。 该命令是从bash脚本开始执行的,但是一旦执行,bash脚本就会终止。 我尝试使用各种组合来始终以相同的结果调用命令(调用该命令后立即终止bash脚本)。我得到的输出如下: 我也尝试过最后用a来调用命令,但是再次失败了。 谁能告诉我如何从bash脚本调用命令? 谢谢 问题答案: 您的Shell脚本没有终止。它仍在运行。您会收到提示,因为正在生成新的

  • 问题内容: 我正在尝试使用bash脚本将JSON文件上传到我的noSQL数据库中,但是它不起作用,我也不明白为什么。 这是脚本: 这是错误: 当我执行命令行中给出的命令时,它仍然可以正常工作。 这是什么错误?谢谢 问题答案: 不要将命令存储在变量中;如果您绝对必须具有可用于日志记录的内容,请将 参数 放入数组中。

  • 我正在尝试使用Jcraft-Jsch库通过Java应用程序管理路由器。 我正试图通过TFTP服务器发送路由器配置。问题出在我的Java代码中,因为这适用于PuTTY。 这是我的Java代码: 我明白了 行的自动命令“192.168.50.1”无效 问题是如何运行这些连续的命令。