0

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

可以说这是我的脚本

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

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

4

4 回答 4

2

一种可能的解决方案是使用 a 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`
> @@
于 2013-10-09T07:17:24.697 回答
1

您的登录是否无密码。

如果是,您可以使用管道在远程机器上执行语句

喜欢:

cat myshellscript.sh | ssh blah@blah.com -q
于 2013-10-09T07:20:04.293 回答
0

ssh -t user@remotehost 'uptime' user@remotehost 的密码:23:35:33 up 2:05, 3 个用户,平均负载:0.79, 0.52, 0.60 远程连接关闭。

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

于 2014-01-06T18:07:07.497 回答
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
于 2013-10-09T07:17:08.727 回答