【问题标题】:Sending Terminal commands from a running script on remote back to my local?将远程运行脚本中的终端命令发送回我的本地?
【发布时间】:2018-08-18 17:00:57
【问题描述】:

我正在使用 ssh 登录并使用 vi 开发的远程服务器上进行开发。但是,我需要将终端通知命令osascript -e "display notification {} {} {}" 和此类命令发送回我的本地终端,以便我可以在我的系统上获得声音/mac 通知。我如何做到这一点?

我知道我可以将import os; os.sytem('command') 用于服务器上的脚本,以在其运行的机器(即服务器本身)上发送终端命令,但是是否有类似的命令可以将命令发送回我的本地?理想情况下,我需要从脚本本身完成此操作 - 因为我有多个触发器来完成通知。

【问题讨论】:

  • 你是如何在本地和服务器机器之间建立连接的?
  • 我使用SSH连接服务器
  • 我可能没有理解正确,您正在服务器上开发一些东西?你需要你的脚本向你的本地机器发送一些命令吗?对吗?
  • 是的,没错
  • 然后你需要在本地机器上的另一个脚本来获取命令,你需要使用一点套接字编程来在服务器和本地机器之间进行通信,你可以从你的服务器发送消息到你的本地机器然后在你的本地机器上决定如果你收到一条“bla bla bla”内容的消息你要做什么.. [抱歉英语不好]

标签: python ssh remote-access openssh python-os


【解决方案1】:

你需要使用一些套接字

在您的服务器机器上,您需要这样的东西:

import socket


IP = "0.0.0.0"  # Your Local Machine IP
PORT = 5200  # Your Local Machine Listening Port

def send_message(msg):
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect((IP, PORT))
    s.send(bytes(msg, 'UTF-8'))
    data = s.recv(4096)
    s.close()
    print(data)

你可以在任何你需要的地方使用方法,唯一的参数是msg,只是你需要发送到本地机器的命令

在您的本地计算机上,此脚本应该可以满足您的需要:

import socket
import os


IP = "0.0.0.0"  # 0.0.0.0 Means every available IP to assign, but you need to use your external IP on the script that u will use on server
PORT = 5200  # The port you want to listen on
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((IP, PORT))
s.listen(1)



while True:
    conn, addr = s.accept()
    print("Command from {}".format(addr))
    data = conn.recv(4096)
    if not data: continue
    if data == b'stop': break  # This line just defines a word that will make your local machine stop listening.
    print(data)
    command = data.decode('UTF-8')
    os.system(command)
    conn.send(data)

conn.close()

你需要先运行本地机器脚本

【讨论】:

  • 嗯,它不起作用-我尝试了完全相同的脚本。我的本地是 Mac-我去了首选项>网络并在那里找到了我的 IP,对于服务器我做了ifconfig |grep inet。我的本地脚本无法捕获任何内容并引发错误:File "list.py", line 12, in <module> s.bind((IP, PORT)) File "/Users/deepak/anaconda2/lib/python2.7/socket.py", line 228, in meth return getattr(self._sock,name)(*args) socket.error: [Errno 49] Can't assign requested address。如果我在本地脚本中将 IP 保持为 0.0.0.0,它只会运行而不会发生任何事情。
  • @Deepak 你不需要在本地机器脚本上更改IP,你需要在服务器机器脚本上更改它
  • 不使用 mate,两个脚本都在运行 - 没有任何反应。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-12
  • 2019-02-25
  • 2016-10-25
  • 1970-01-01
  • 2021-10-24
  • 2018-05-04
  • 1970-01-01
相关资源
最近更新 更多