我需要使用expect和密码ssh到另一台机器并在那里启动一个程序,然后在我的本地机器上启动一个程序。我怎样才能做到这一点?

我需要使用expect和密码ssh到另一台机器并在那里启动一个程序,然后在我的本地机器上启动一个程序。我怎样才能做到这一点?

正如标题中所述,我正在编写一个应该在计算机 A 上运行的脚本。计算机 A 应该ssh在计算机 B 上运行程序 B,然后退出会话ssh(程序 B 仍在计算机 B 上运行),然后在计算机 A 上运行程序 A 。

我必须使用 Expect 并且必须使用 ssh 密码才能完成此操作。

这是我到目前为止的尝试(它不起作用):

#!/bin/bash

#checks to see if programA is already running

if pidof -x "programA" >/dev/null; then
    echo "Program A already running"
    exit 1
fi

spawn ssh username@{$1}
/usr/bin/expect "assword:"
send "password"
./programB & # run programB in the background
exit
./programA

这是应该终止两台计算机上的程序的脚本:

pkill programA
spawn ssh username@{$1}
/usr/bin/expect "assword:"
send "password"
pkill programB
exit

启动程序的脚本未按预期工作。它在计算机 A 上启动程序 A 和程序 B。我还注意到,我需要分离我的ssh会话,否则当我在计算机 B 上退出它时,程序 B 将终止。

有人可以向我提供执行我想要的操作的脚本,并解释我出错的地方吗?

先感谢您。

答案1

看起来几乎没问题。尝试以下(显然未经测试)

#!/bin/bash

#checks to see if programA is already running

if pidof -x "programA" >/dev/null; then
    echo "Program A already running"
    exit 1
fi

expect <<EOF
 spawn ssh username@${1}
 expect "assword:"
 send "password\r"
 expect "$ "
 send "nohup ./programB &\r" # run programB in the background
 exit
EOF
./programA

编辑:关于 ssh username@{$1} 的地址评论

相关内容