我正在尝试连接到路由器的子模块,在其上运行一些命令并将输出保存到文件中。我遇到的问题是子模块需要用户名和密码,如果将所有命令放在一个脚本中,则会在输入提示之前发送用户名/通行证详细信息。有没有办法在命令之间设置延迟,或者在同一个SSH会话下批量运行它们?
我使用了EOF方法,并将命令放在一个单独的文件中(首选):
ssh user@root > 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 :(得分:1)
我之前使用命名管道完成了这项工作。创建命名管道并将其输入发送到ssh命令。
mkfifo a=rw FOO
cat FOO | ssh user@root > file.log
然后,您可以从另一个脚本将命令写入FOO:
echo username >> FOO
sleep 3
echo password >> FOO
然而......存在一种工具来完全按照你的方式行事。它被称为clogin
。请参阅https://linux.die.net/man/1/clogin