【发布时间】:2013-10-16 10:03:40
【问题描述】:
我正在通过 shell 脚本登录远程机器(通过在脚本中放置 ssh 命令)。 在 ssh 命令之后,脚本的其余行将在当前机器上执行,而不是在远程机器上执行。如何让其余的 shell 脚本行在远程机器上执行。?
假设这是我的脚本
ssh username@ip-address
ls
whoami
----
ssh 之后的其余行应该在远程机器上执行,而不是在当前机器上执行。如何做到这一点?
【问题讨论】:
我正在通过 shell 脚本登录远程机器(通过在脚本中放置 ssh 命令)。 在 ssh 命令之后,脚本的其余行将在当前机器上执行,而不是在远程机器上执行。如何让其余的 shell 脚本行在远程机器上执行。?
假设这是我的脚本
ssh username@ip-address
ls
whoami
----
ssh 之后的其余行应该在远程机器上执行,而不是在当前机器上执行。如何做到这一点?
【问题讨论】:
一种可能的解决方案是使用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`
> @@
【讨论】:
您的登录是否无密码。
如果是,你可以直接使用管道在远程机器上执行语句
喜欢:
cat myshellscript.sh | ssh blah@blah.com -q
【讨论】:
使用带有-t 选项的ssh 命令。例如:
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
【讨论】:
ssh -t user@remotehost '正常运行时间' 用户@remotehost 的密码: 23:35:33 上升 2:05,3 个用户,平均负载:0.79、0.52、0.60 与远程的连接已关闭。
当你指定-t时,它会在远程机器上打开终端并执行命令。
【讨论】: