繁体   English   中英

ssh成功登录后,期望脚本不会发送命令

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM