这是我之前问题的延续:未找到生成命令
在参考了一些旧帖子后,我已经编写了这些命令,如果它是错误的,那么我如何运行 ssh 到远程服务器并运行一些命令?
答案1
一种可能性是:创建一个 Expect-syntax 文件,并通过 shell 脚本调用它:
#!/bin/bash
expect -f my-file.exp $1 # parameter 1 is the server name
在 my-file.exp 中,您只会有 Expect 命令:
spawn ssh "username@[lindex $argv 0]" # param 1 : server name
# expect now reads the input and does what you tell it on certain patterns
expect {
"password:" { send "my-password\r"; send "do_this_command\r"; send "do_that_command\r"; exp_continue; }
"done" { send_user "exiting"; }
}
此示例登录到发送明文密码的服务器,然后发送一些命令并继续。
如果它从输入中读取“完成”,则终止,否则它将在几秒钟后超时。
只要执行“exp_continue”,它就会停留在 Expect {} 循环内,匹配输入并执行适当的输出。
答案2
您还可以在 shell 脚本中使用expect shebang 并编写expect 脚本。
#!/usr/bin/expect -f
spawn ssh localhost
expect "password: "
send "password\r"
expect "{[#>$]}" #expect several prompts, like #,$ and >
send -- "command.sh\r"
expect "result of command"
etc...