为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

有只小跳蛙 2019-07-06 15:52:26
使用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,是因为我使用了一个菜单,我可以选择连接到哪个单元。谢谢
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

混合bash和Expect并不是达到预期效果的好方法。我只想用Expect:

#!/usr/bin/expecteval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no usr@$myhost.example.com#use correct promptset prompt ":|#|
\\\$"interact -o -nobuffer -re $prompt returnsend "my_password\r"interact -o -nobuffer -re $prompt returnsend "my_command1\r"
interact -o -nobuffer -re $prompt returnsend "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 }'

这将等待输入和返回(片刻)交互会话。


查看完整回答
反对 回复 2019-07-06
?
12345678_0001

TA贡献1802条经验 获得超5个赞

最简单的方法是使用刀柄..这在Ubuntu/Debian Repos中是可用的,您不需要处理将Expect与bash集成的问题。

例如:

sshpass -p<password> ssh <arguments>sshpass -ptest1324 ssh user@192.168.1.200 ls -l /tmp

上面的命令可以很容易地与bash脚本集成。

注:请阅读安全考虑分节man sshpass为了充分理解安全问题。


查看完整回答
反对 回复 2019-07-06
?
慕码人8056858

TA贡献1803条经验 获得超6个赞

在EOD之前添加“InteractiveExpect”命令:

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

这应该允许您与远程机器交互,直到您注销为止。那你就会回到巴什。


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 968 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信