linux 无法在远程服务器中执行sh文件,应为

cbwuti44  于 2022-11-28  发布在  Linux
关注(0)|答案(1)|浏览(239)

我尝试使用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

我想知道为什么以及如何成功地执行脚本。

oxosxuxt

oxosxuxt1#

spawn的参数不使用shell执行,因此< pwd.sh作为文字参数传递给ssh,并将它们发送到远程shell。
您可以衍生一个本地bash来执行该命令。

spawn bash -c "ssh ${user}@${host} 'bash -s' < ${cmd}"

相关问题