python - 使用 python 的远程 shell

标签 python linux shell sockets remote-access

我想做一个简单的远程shell。我已经使用套接字进行通信并且它在 LAN 中工作。现在我的 friend 正试图从他的客户端连接到我的服务器脚本,但他做不到。 我已在路由器中打开公共(public)端口 4333 并将其关联到私有(private)端口 10001。

顺便说一下,我已经用 XX 替换了 IP。

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Client's script


import socket
import sys
import os

# I create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

server_address = ('XX.XXX.XX.XX', 4333)
sock.connect(server_address)


datos = sock.recv(30)

comando = str(datos)
os.system(comando)

=========

#!/usr/bin/python
# -*- coding: utf-8 -*-

# Server's script


import socket
import sys

# I create the TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

direc = socket.gethostbyname(socket.gethostname())
# Socket link
server_address = (direc, 10001)
connection = sock.bind(server_address)

sock.listen(1)

coman = ''
while coman != 'salir':
    # Awaiting conecction
    print "Esperando conexion..."
    connection, client_address = sock.accept()
    coman = raw_input("Introduce comando: ")
    connection.sendall(coman)


connection.close()

最佳答案

direc 的值是多少?它应该是您的服务器工作的可连接 IP 地址,即 127.0.0.1 对您的 friend 不起作用,即使他们与您的机器在同一局域网下。

sock.bind() 表示套接字将只监听到方向:10001 的连接。您可以使用 0.0.0.0 来表示“整个互联网”。

关于python - 使用 python 的远程 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38858259/

相关文章:

python - django 模型的字段包括其他对象的属性

python - 字典元素到字符串

python - conda --from-history 和 --no-build 不能一起工作

linux - 为什么来自某些脚本(python、perl、libtool)的 shebang 和命令会被 bash 错误地解释?

mysql - bash 代码中意外标记 `done' 附近的语法错误

python - Cython:具有自定义参数类型的 std::function 回调

python - 在打开的树莓派上运行 python 脚本

linux - 使用 makefile 检查符号链接(symbolic link)是否存在,如果不存在则创建

linux - 如何绕过 bash 中的 CRLF 标签?

bash - 使用 bash 一个一个地读取 zip 文件中的文件