我想在本地系统上运行命令,而我在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
编辑:我想回复一些消息,因为回显命令输出不会从远程机器显示,我想从本地运行。
答案 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)