我正在通过 shell 脚本登录远程机器(通过在脚本中放置 ssh 命令)。在 ssh 命令之后,脚本的其余行将在当前机器上执行,而不是在远程机器上执行。如何使其余的 shell 脚本行在远程机器上执行。?
可以说这是我的脚本
ssh username@ip-address
ls
whoami
----
ssh 之后的其余行应在远程机器上执行,而不是在当前机器上执行。如何做到这一点?
一种可能的解决方案是使用 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`
> @@
您的登录是否无密码。
如果是,您可以使用管道在远程机器上执行语句
喜欢:
cat myshellscript.sh | ssh blah@blah.com -q
ssh -t user@remotehost 'uptime' user@remotehost 的密码:23:35:33 up 2:05, 3 个用户,平均负载:0.79, 0.52, 0.60 远程连接关闭。
当您指定 -t 时,它会在远程机器中打开终端并执行命令。
使用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