将终端命令从远程运行的脚本发送回本地?

时间:2018-03-10 04:32:22

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

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

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

1 个答案:

答案 0 :(得分:0)

您需要使用一些套接字

在您的服务器计算机上,您需要以下内容:

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()

您需要先运行本地计算机脚本