我必须在远程机器上运行本地shell脚本(windows/Linux)。

我在机器A和机器B上都配置了SSH。我的脚本在机器A上,它将在远程机器B上运行我的一些代码。

本地和远程计算机可以是基于Windows或Unix的系统。

是否有一种方法来运行这个使用plink/ssh?


当前回答

ssh user@hostname ". ~/.bashrc;/cd path-to-file/;. filename.sh"

强烈建议使用环境文件(.bashrc/.bashprofile/.profile)。在远程主机上运行某些东西之前,因为目标主机和源主机的环境变量可能会延迟。

其他回答

你可以使用runoverssh:

sudo apt install runoverssh
runoverssh -s localscript.sh user host1 host2 host3...

-s远程运行本地脚本


有用的标志: -g对所有主机使用全局密码(单密码提示) -n使用SSH代替sshpass,用于公钥认证

<hostA_shell_prompt>$ ssh user@hostB "ls -la"

这将提示您输入密码,除非您已经将hostA用户的公钥复制到用户.ssh目录的home目录下的authorized_keys文件。这将允许无密码身份验证(如果在ssh服务器的配置上接受作为身份验证方法)。

首先,使用scp将脚本复制到机器B

[user@machineA]$ scp /path/to/script user@machineB:/home/user/path

然后,运行脚本

[user@machineA]$ ssh user@machineB "/home/user/path/script"

如果您已经为脚本授予了可执行权限,那么这将起作用。

假设您的意思是希望从“本地”机器自动执行此操作,而不需要手动登录到“远程”机器,那么您应该查看名为Expect的TCL扩展,它正是为这种情况而设计的。我还提供了一个通过SSH登录/交互的脚本链接。

https://www.nist.gov/services-resources/software/expect

http://bash.cyberciti.biz/security/expect-ssh-login-script/

本地脚本是否使用本地设置的变量、函数或别名尚不清楚。

如果它这样做,应该工作:

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