在bash中的ssh上运行本地计算机上的命令

时间:2016-07-25 12:11:35

标签: linux bash ssh

我想在本地系统上运行命令,而我在sash中使用bsh远程系统。有没有办法做到这一点?这就是我想要的:

#!/bin/bash

ssh mysystem@ip <<'SSH'
#Do something
#Run a command here on local machine and not on machine I have sshed to
#Do Something

exit
SSH

编辑:我想回复一些消息,因为回显命令输出不会从远程机器显示,我想从本地运行。

2 个答案:

答案 0 :(得分:5)

当您使用SSH时,密钥序列<enter>~是一个转义前缀,允许您暂停SSH并将密钥序列发送到主机端的ssh客户端。 序列<enter>~<ctrl + z>将暂停(停止)ssh-client作业并将您转到呼叫系统中的提示符。键入fg(如果你在Unix shell上)将在之后恢复你的ssh会话。

您可以通过键入<enter>~?查看其他ssh转义序列。 序列<enter>~.将终止连接,并且在远程计算机上锁定会话时非常方便。

(使用非{美国键盘布局使用~作为死键构建重音和数字的用户显然在所有这些序列中键入~两次)

这些序列在您自己操作SSH会话和命令时非常有用,而不是用于编写脚本。

由于您似乎想要在脚本中使用这种方法,因此直接的解决方案是将ssh命令包含回原始主机。

答案 1 :(得分:2)

如果您可以更改脚本,则可以使用expect脚本 - expect_example_and_tips

这允许您启动一个“ssh进程”,可以将命令发送到远程计算机,同时仍在本地计算机上运行。

虽然在我看来python更容易 - 例如:

#!/usr/bin/env python

import pexpect

PROMPT = "\$|\%|\>"
ssh_cmd = "ssh user@192.168.1.1"

try:
     ssh = pexpect.spawn(ssh_cmd)
     ssh.sendline("echo hello on remote")
     ssh.expect(PROMPT)
     print "hello on local machine"
     ssh.close()

except Exception as e:
     print e
     sys.exit(2)
相关问题