如何将很多命令交给expect命令?
How to hand over many commands into expect command?
我必须用 ssh
连接到服务器和 运行 很多命令。
据我所知,解决方案是这样的脚本
expect -c 'spawn -noecho ssh '"admin"@"server"' "sudo bash -c \"command1\"";
expect "*assword:*"; send "'${user_password}'\r";
expect eof'
重复了几次。但是我不想每次都连接
也许您知道如何 运行 command1 command2 ... 在一个连接中?
谢谢
从 man ssh 可以做到
ssh [user@]hostname [command]
您还可以通过管道命令并使用多个命令,如下所示:
ssh user@hostname "command1; command2; command3"
@SMA 也对,你可以在你的服务器上创建一个脚本并使用:
ssh user@hostname 'bash myscript.sh'
扩展@LittlePanic404 的回答:
ssh user@hostname "command1; command2; command3"
也可以换行写,可读性还不错。此外,使用 shell 引用的 heredocs,并使用环境将 shell 变量传递给 expect:
export user host password
expect << 'END_EXPECT'
spawn -noecho ssh $env(user)@$env(host) {
command1
command2
command3
}
expect "*assword:*" {send "$env(password)\r"}
expect eof
END_EXPECT
请注意,expect 是一个 Tcl 扩展,Tcl 使用 {braces}
的方式与 shell 使用 'single quotes'
的方式相同
我必须用 ssh
连接到服务器和 运行 很多命令。
据我所知,解决方案是这样的脚本
expect -c 'spawn -noecho ssh '"admin"@"server"' "sudo bash -c \"command1\"";
expect "*assword:*"; send "'${user_password}'\r";
expect eof'
重复了几次。但是我不想每次都连接
也许您知道如何 运行 command1 command2 ... 在一个连接中?
谢谢
从 man ssh 可以做到
ssh [user@]hostname [command]
您还可以通过管道命令并使用多个命令,如下所示:
ssh user@hostname "command1; command2; command3"
@SMA 也对,你可以在你的服务器上创建一个脚本并使用:
ssh user@hostname 'bash myscript.sh'
扩展@LittlePanic404 的回答:
ssh user@hostname "command1; command2; command3"
也可以换行写,可读性还不错。此外,使用 shell 引用的 heredocs,并使用环境将 shell 变量传递给 expect:
export user host password
expect << 'END_EXPECT'
spawn -noecho ssh $env(user)@$env(host) {
command1
command2
command3
}
expect "*assword:*" {send "$env(password)\r"}
expect eof
END_EXPECT
请注意,expect 是一个 Tcl 扩展,Tcl 使用 {braces}
的方式与 shell 使用 'single quotes'