2016-11-22 43 views
1

我想连接到路由器的子模块,在其上运行一些命令并将输出保存到文件中。我遇到的问题是子模块需要用户名和密码,如果将所有命令放在单个脚本中,则会在出现提示输入它们之前发送用户名/密码详细信息。有没有办法在这些命令之间设置延迟,或者在相同的SSH会话下批量运行它们?Bash - SSH在它们之间有多个延迟命令

我用EOF方法,并且还具有在一个单独的文件中的命令(首选):

ssh [email protected] > file.log << EOF 
session slot 1 # command to connect to the subslot. 
        # a delay of about 3 sec would be required before the credentials are sent 
slot_username 
slot_password 
command1 
command2 
command3 
exit 
exit 
EOF 

此外,第二出口应该带我出去的路由器,但它仅仅是忽略不计。

+0

我建议使用'expect'。 – Cyrus

+0

谢谢。最后我使用expect创建了一个脚本。我将它与一个bash脚本结合起来提示菜单并获得用户输入。我确信有一个“更聪明”的方式来做到这一点,但我还没有找到一种方法来获得用户输入的期望和使用的数据作为变量.. –

回答

1

我已经使用命名管道完成了此操作。创建一个命名管道并将其输入发送到ssh命令。

mkfifo a=rw FOO 
cat FOO | ssh [email protected] > file.log 

然后,您可以从另一个脚本编写命令为FOO:

echo username >> FOO 
sleep 3 
echo password >> FOO 

但是...工具存在这样做的,你在做什么。它叫做clogin。请参阅文档https://linux.die.net/man/1/clogin

+0

OP也可以检查,看看本地系统是否有安装“期望”软件包/程序(如果我正确理解Q)。祝你们好运。 – shellter