[英]Expect script not sending commands after successful ssh login
启动以下脚本时,ssh登录成功,并且我可以进行交互,但是它不发送cd folder
命令。 如果我确定这是我要发送的第一个命令,那么我expect "$"
命令是否很有用?如何发送cd folder
命令?
这是短期期望脚本:
#!/usr/bin/expect
eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no host@exemple.com
expect "password"
send "mypassword\r"
expect "$"
send "cd folder\r"
interact
谢谢!
您需要expect
更具体的shell提示。
根据预期的手册:
请注意,在许多编辑器中,
^
和$
匹配行的开头和结尾。 但是,由于Expect 不是面向行的 ,因此这些字符匹配当前在Expect匹配缓冲区 中的数据的开头和结尾 (与行相对)。
你应该使用创建的SSH密钥ssh-keygen
(或像这样 ),并要求服务器管理员将公钥添加到~/.ssh/authorized_keys
的服务器上。 然后,您无需指定密码即可登录到远程计算机。 否则,任何对脚本具有读权限的人都可以代表您访问远程服务器! 关于这个问题有很好的讨论 。
使用配置的键,您可以简单地
ssh user@exemple.com -- 'cd folder; # whatever'
或者,使用here文档的语法:
#!/bin/bash -
ssh -tt user@host <<'EOC'
cd folder
# do something else
exit
EOC
注意,第一个-t
选项强制伪终端分配。 即使ssh
没有本地tty ,多-t
选项也会强制tty分配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.