用于与 ssh 连接的脚本,然后在连接后执行命令

用于与 ssh 连接的脚本,然后在连接后执行命令

我需要编写一个连接到远程服务器的脚本,然后连接后,从那里连接到另一台服务器,然后更改目录。以下当然不起作用(它连接到第一个服务器,然后脚本停止,并在断开连接后恢复):

#!/bin/bash
echo begin:
ssh  serv_1
ssh  serv_2
cd dir1

exit 0

我需要做什么 ?我读了一些与我的问题类似的帖子,但我不明白答案。

答案1

简短的回答是,

ssh srv_1 'ssh srv_2 "command"'

其中 command 是您要运行的任何命令。

它也可以在没有单引号的情况下工作,但我喜欢它们来帮助理解。

ssh srv_1 ssh srv_2 "command"

使用引号为我们提供了一些工作结构,但正如您所看到的,它们从根本上来说并不是必需的。

这也有效,

ssh srv_1 ssh srv_2 command

我们无法从您提供给我们的信息中判断这是否有效,或者该命令是否会执行任何操作,但上面的语法是我会采取的方法。

如果您必须开始使用变量或命令替换,那么它会变得更复杂、更快,并且您需要小心引用和转义。

这是它的工作示例。

Neptune 是我的主机。 Trinity 是另一台服务器。 Matrix是最终服务器。

tony@neptune:~$ ssh trinity 'ssh matrix "hostname"'
matrix

因此该命令返回主机名矩阵,因为它已在服务器矩阵上执行。

注意:以这种方式更改目录绝对没有效果,目录更改仅与执行它们的 shell 相关。

这就是我的意思,

tony@Neptune:~$ ssh trinity 'ssh matrix "cd /tmp"'
tony@Neptune:~$ ssh trinity 'ssh matrix "pwd"'
/home/tony

第二个命令显示前一个cd命令没有持久效果。

相关内容