我尝试使用expect
在远程服务器中执行某些命令,如下所示
- ssh_cmd.sh
#!/usr/bin/expect -f
set host [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set cmd [lindex $argv 3]
set timeout 3
spawn ssh ${user}@${host} 'bash -s' < ${cmd}
expect "*password:"
send "${passwd}\r"
expect eof
- pwd.sh
#!/bin/bash
pwd
当我执行
ssh_cmd.sh xxx.xxx.xxx.xxx root 12345 pwd.sh
返回bash: pwd.sh: No such file or directory
,但在终端直接执行以下命令也可以,成功返回远程服务器路径。
ssh root@xxx.xxx.xxx.xxx 'bash -s' < pwd.sh
我想知道为什么以及如何成功地执行脚本。
1条答案
按热度按时间oxosxuxt1#
spawn
的参数不使用shell执行,因此< pwd.sh
作为文字参数传递给ssh
,并将它们发送到远程shell。您可以衍生一个本地
bash
来执行该命令。