在远程机器上执行shell脚本的一部分

时间:2013-10-09 07:10:23

标签: linux shell ssh

我通过shell脚本登录远程机器(通过在脚本中放置ssh命令)。 在ssh命令之后,脚本的其余行将在当前计算机而不是远程计算机上执行。如何使其余的shell脚本行在远程机器上执行。?

让我们说这是我的剧本

ssh username@ip-address 
ls
whoami
----

ssh之后的其余行应该在远程机器而不是当前机器上执行。怎么做到这一点?

4 个答案:

答案 0 :(得分:2)

一种可能的解决方案是使用heredoc,如以下示例所示:

$ ssh example.foo.com -- <<@@
> ls /etc/
> cat /etc/passwd
> @@

基本上,第一行和最后一行的@@之间的所有内容都将在远程计算机上执行。

您还可以通过将文件内容读入变量来使用文件内容:

$ MYVAR=`cat ~/foo.txt`
$ ssh example.foo.com -- <<@@
> $MYVAR
> @@

或者只是在heredoc中执行相同的操作:

$ ssh example.foo.com -- <<@@
> `cat ~/foo.txt`
> @@

答案 1 :(得分:1)

您的登录名是否无密码。

如果是,您可以使用管道来执行远程计算机上的语句

像:

cat myshellscript.sh | ssh blah@blah.com -q

答案 2 :(得分:0)

使用ssh命令和-t选项。例如:

ssh -t myremotehost 'uptime'
name@myremotehost's password: 
10:14:14 up 91 days, 21:20,  5 users,  load average: 0.20, 0.35, 0.36

答案 3 :(得分:0)

ssh -t user @ remotehost&#39;正常运行时间&#39; user @ remotehost&#39;密码:  23:35:33 up 2:05,3位用户,平均负载:0.79,0.52,0.60 连接到远程关闭。

指定-t时,它会打开远程机器中的终端并执行命令。