我必须在远程机器上运行本地shell脚本(windows/Linux)。
我在机器A和机器B上都配置了SSH。我的脚本在机器A上,它将在远程机器B上运行我的一些代码。
本地和远程计算机可以是基于Windows或Unix的系统。
是否有一种方法来运行这个使用plink/ssh?
我必须在远程机器上运行本地shell脚本(windows/Linux)。
我在机器A和机器B上都配置了SSH。我的脚本在机器A上,它将在远程机器B上运行我的一些代码。
本地和远程计算机可以是基于Windows或Unix的系统。
是否有一种方法来运行这个使用plink/ssh?
当前回答
如果它是一个脚本,那么上面的解决方案是没问题的。
我会安排Ansible来做这项工作。它以同样的方式工作(Ansible使用ssh在Unix或Windows的远程机器上执行脚本)。
它将更具结构化和可维护性。
其他回答
假设您的意思是希望从“本地”机器自动执行此操作,而不需要手动登录到“远程”机器,那么您应该查看名为Expect的TCL扩展,它正是为这种情况而设计的。我还提供了一个通过SSH登录/交互的脚本链接。
https://www.nist.gov/services-resources/software/expect
http://bash.cyberciti.biz/security/expect-ssh-login-script/
尝试运行ssh user@remote sh ./script. unix。
我用它在远程机器上运行一个shell脚本(在/bin/bash上测试):
ssh deploy@host . /home/deploy/path/to/script.sh
本地脚本是否使用本地设置的变量、函数或别名尚不清楚。
如果它这样做,应该工作:
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
这个bash脚本可以ssh到目标远程机器,并在远程机器上运行一些命令,在运行它之前不要忘记安装expect(在mac brew上安装expect)
#!/usr/bin/expect
set username "enterusenamehere"
set password "enterpasswordhere"
set hosts "enteripaddressofhosthere"
spawn ssh $username@$hosts
expect "$username@$hosts's password:"
send -- "$password\n"
expect "$"
send -- "somecommand on target remote machine here\n"
sleep 5
expect "$"
send -- "exit\n"