我需要编写一个连接到远程服务器的脚本,然后连接后,从那里连接到另一台服务器,然后更改目录。以下当然不起作用(它连接到第一个服务器,然后脚本停止,并在断开连接后恢复):
#!/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
命令没有持久效果。