![用于与 ssh 连接的脚本,然后在连接后执行命令](https://linux22.com/image/7128/%E7%94%A8%E4%BA%8E%E4%B8%8E%20ssh%20%E8%BF%9E%E6%8E%A5%E7%9A%84%E8%84%9A%E6%9C%AC%EF%BC%8C%E7%84%B6%E5%90%8E%E5%9C%A8%E8%BF%9E%E6%8E%A5%E5%90%8E%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
我需要编写一个连接到远程服务器的脚本,然后连接后,从那里连接到另一台服务器,然后更改目录。以下当然不起作用(它连接到第一个服务器,然后脚本停止,并在断开连接后恢复):
#!/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
命令没有持久效果。