在bash脚本中使用expect自动化ssh连接
我正在尝试使用expect做一个shell脚本来自动连接,因为它不允许使用ssh密钥。这是我第一个使用expect的脚本,我觉得有点困惑。在这种情况下,我可以通过ssh连接,但我无法关闭连接,我不知道该怎么做,知道吗在bash脚本中使用expect自动化ssh连接,bash,shell,expect,tcl,Bash,Shell,Expect,Tcl,我正在尝试使用expect做一个shell脚本来自动连接,因为它不允许使用ssh密钥。这是我第一个使用expect的脚本,我觉得有点困惑。在这种情况下,我可以通过ssh连接,但我无法关闭连接,我不知道该怎么做,知道吗 #!/bin/bash user=pepe host=server pass=`cat /tmp/password.txt` COMMAND=df PASSWORD=$pass expect -c " spawn ssh $user@$host
#!/bin/bash
user=pepe
host=server
pass=`cat /tmp/password.txt`
COMMAND=df
PASSWORD=$pass expect -c "
spawn ssh $user@$host
expect "*assword*"
send \$env(PASSWORD)\r
expect {
"*be*" {send $COMMAND\r;interact}}
"
即时修复方法是将命令指定为
ssh
的参数,然后建立连接,命令将运行,连接将关闭
#/bin/bash
用户=pepe
主机=服务器
pass=`cat/tmp/password.txt`
命令=df
密码=$pass expect-c“
生成ssh$user@$host$命令
期望\“*assword*\”
发送\$env(密码)\r
预期eof
"
有几件事需要注意:
将优雅地等待生成的命令退出expect eof
- 我避开了内部的双引号
下一步是整理引用/转义。在shell脚本中嵌入另一种语言的代码时,使用带引号的herdoc是避免引用hell的最佳方法。这意味着所有shell变量都需要通过环境传递给expect
#/bin/bash
导出用户=pepe
导出主机=服务器
导出密码=`cat/tmp/password.txt`
导出cmd=df
expect立即修复的方法是将该命令指定为ssh的参数,然后建立连接,命令将运行,连接将关闭
#/bin/bash
用户=pepe
主机=服务器
pass=`cat/tmp/password.txt`
命令=df
密码=$pass expect-c“
生成ssh$user@$host$命令
期望\“*assword*\”
发送\$env(密码)\r
预期eof
"
有几件事需要注意:
expect eof
将优雅地等待生成的命令退出
- 我避开了内部的双引号
下一步是整理引用/转义。在shell脚本中嵌入另一种语言的代码时,使用带引号的herdoc是避免引用hell的最佳方法。这意味着所有shell变量都需要通过环境传递给expect
#/bin/bash
导出用户=pepe
导出主机=服务器
导出密码=`cat/tmp/password.txt`
导出cmd=df
expect查看my,您可以使用它仅使用shell代码编写expect脚本。查看my,您可以使用它仅使用shell代码编写expect脚本。