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

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

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

我试图在bash脚本中使用Expect来提供SSH密码。提供密码工作,但我没有结束在SSH会话,我应该,它回到海峡的打击。

我的剧本:

#!/bin/bashread -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会话,并且只有当我退出SSH会话才能返回到bash脚本。我之所以在Expect之前使用bash,是因为我使用了一个菜单,我可以选择连接到哪个单元。

谢谢


有只小跳蛙
浏览 969回答 3
3回答

慕斯王

混合bash和Expect并不是达到预期效果的好方法。我只想用Expect:#!/usr/bin/expecteval&nbsp;spawn&nbsp;ssh&nbsp;-oStrictHostKeyChecking=no&nbsp;-oCheckHostIP=no&nbsp;usr@$myhost.example.com#use&nbsp;correct&nbsp;promptset&nbsp;prompt&nbsp;":|#| \\\$"interact&nbsp;-o&nbsp;-nobuffer&nbsp;-re&nbsp;$prompt&nbsp;returnsend&nbsp;"my_password\r"interact&nbsp;-o&nbsp;-nobuffer&nbsp;-re&nbsp;$prompt&nbsp;returnsend&nbsp;"my_command1\r" interact&nbsp;-o&nbsp;-nobuffer&nbsp;-re&nbsp;$prompt&nbsp;returnsend&nbsp;"my_command2\r"interactbash的示例解决方案可以是:#!/bin/bash/usr/bin/expect&nbsp;-c&nbsp;'expect&nbsp;"\n"&nbsp;{&nbsp;eval&nbsp;spawn&nbsp;ssh&nbsp;-oStrictHostKeyChecking=no&nbsp;-oCheckHostIP=no&nbsp;usr@$myhost.example.com;&nbsp;interact&nbsp;}'这将等待输入和返回(片刻)交互会话。

12345678_0001

最简单的方法是使用刀柄..这在Ubuntu/Debian Repos中是可用的,您不需要处理将Expect与bash集成的问题。例如:sshpass&nbsp;-p<password>&nbsp;ssh&nbsp;<arguments>sshpass&nbsp;-ptest1324&nbsp;ssh&nbsp;user@192.168.1.200&nbsp;ls&nbsp;-l&nbsp;/tmp上面的命令可以很容易地与bash脚本集成。注:请阅读安全考虑分节man sshpass为了充分理解安全问题。

慕码人8056858

在EOD之前添加“InteractiveExpect”命令:#!/bin/bashread&nbsp;-s&nbsp;PWD/usr/bin/expect&nbsp;<<EOD spawn&nbsp;ssh&nbsp;-oStrictHostKeyChecking=no&nbsp;-oCheckHostIP=no&nbsp;usr@$myhost.example.com expect&nbsp;"password"send&nbsp;"$PWD\n"&nbsp;interact EOD echo&nbsp;"you're&nbsp;out"这应该允许您与远程机器交互,直到您注销为止。那你就会回到巴什。
打开App,查看更多内容
随时随地看视频慕课网APP