我必须在远程机器上运行本地shell脚本(windows/Linux)。
我在机器A和机器B上都配置了SSH。我的脚本在机器A上,它将在远程机器B上运行我的一些代码。
本地和远程计算机可以是基于Windows或Unix的系统。
是否有一种方法来运行这个使用plink/ssh?
我必须在远程机器上运行本地shell脚本(windows/Linux)。
我在机器A和机器B上都配置了SSH。我的脚本在机器A上,它将在远程机器B上运行我的一些代码。
本地和远程计算机可以是基于Windows或Unix的系统。
是否有一种方法来运行这个使用plink/ssh?
当前回答
尝试运行ssh user@remote sh ./script. unix。
其他回答
尝试运行ssh user@remote sh ./script. unix。
另外,如果想从目标主机获取变量,不要忘记转义变量。
这在过去曾让我陷入困境。
例如:
user@host> ssh user2@host2 "echo \$HOME"
输出/home/user2
而
user@host> ssh user2@host2 "echo $HOME"
打印出/home/user
另一个例子:
user@host> ssh user2@host2 "echo hello world | awk '{print \$1}'"
正确地输出“hello”。
本地脚本是否使用本地设置的变量、函数或别名尚不清楚。
如果它这样做,应该工作:
myscript.sh:
#!/bin/bash
myalias $myvar
myfunction $myvar
它使用$myvar, myfunction和myalias。让我们假设它们是在本地设置的,而不是在远程机器上。
创建一个包含脚本的bash函数:
eval "myfun() { `cat myscript.sh`; }"
设置变量、函数和别名:
myvar=works
alias myalias='echo This alias'
myfunction() { echo This function "$@"; }
使用env_parallel从GNU Parallel中导出myfun, myfunction, myvar和myalias到服务器:
env_parallel -S server -N0 --nonall myfun ::: dummy
假设您的意思是希望从“本地”机器自动执行此操作,而不需要手动登录到“远程”机器,那么您应该查看名为Expect的TCL扩展,它正是为这种情况而设计的。我还提供了一个通过SSH登录/交互的脚本链接。
https://www.nist.gov/services-resources/software/expect
http://bash.cyberciti.biz/security/expect-ssh-login-script/
你可以使用runoverssh:
sudo apt install runoverssh
runoverssh -s localscript.sh user host1 host2 host3...
-s远程运行本地脚本
有用的标志: -g对所有主机使用全局密码(单密码提示) -n使用SSH代替sshpass,用于公钥认证