【问题标题】:SSH and telnet to localhost using python使用 python SSH 和 telnet 到本地主机
【发布时间】:2015-04-02 10:44:23
【问题描述】:

我是 python 新手,如果这个问题很简单,我很抱歉。简单地说,我需要编写一个脚本,通过 ssh 连接到远程,然后 telnet 到 localhost 并在那里的 shell 上执行命令。

我正在使用 Python 2.4.3。我在这里阅读了很多类似的问题,很多人建议使用 Paramiko、Pexpect 等模块。但是这是不可能的——我应该只使用“本机”2.4.3 库。我试过弄乱子进程模块,我已经设法连接到远程shell(但是我需要提供密码——我想通过在脚本中提供密码来避免这种情况)——但我仍然需要做一个telnet 到 localhost 并在不同的 shell 上执行一些命令。

谁能这么好心给我一些提示?提前致谢。

TL;DR 我正在寻找这个 bash 命令的 python 替代品:

./sshpass -p 密码 ssh 用户名@$ip -t "(sleep 1;echo "command" ; sleep 1) | telnet localhost $port;exit;bash" >> testing.txt

【问题讨论】:

  • 您实际上想要完成什么?如果您通过ssh 登录,那么telnet localhost 将毫无意义——它只会添加一个不安全的本地第二个连接。
  • 这是我在技术大学的编程课程。基本上,我们在服务器上安装了 Fedora,并通过 localhost 连接到各种网络设备。我们需要做的是登录到服务器,然后连接到这些设备,在它们的自定义 shell 上执行命令并将输出保存到我​​们桌面上的文件中。两周前我们在 bash 中做了同样的事情 - 我们就是这样做的。现在我们需要做同样的事情,但使用 python。
  • 是否需要在 ssh 连接中使用 Python?这真的没有意义。一旦你进入,你是在一个shell中。
  • 但是通过 ssh 端口转发,您可以公开端口并使用本机 socket 调用连接到那些端口。这就是你想要的吗?
  • 我们要做的是在python中编写一个连接设备的脚本,执行命令并将输出保存到文件中。该设备作为具有给定端口的本地主机连接到具有给定 IP 的 Fedora 远程服务器。对不起,我只是二年级学生,所以请原谅我的无知——不知道你的意思。使用 bash 非常简单,因为我使用了这样的命令: ./sshpass -p password ssh username@$ip -t "(sleep 1;echo "command" ; sleep 1) | telnet localhost $port;exit;bash" > > testing.txt - 我想在 python 中做类似的事情。

标签: python shell ssh telnet


【解决方案1】:

简单搜索后:

远程登录: link

import getpass
import sys
import telnetlib

HOST = "hostname"

user = raw_input("Enter your remote account: ")

password = getpass.getpass()

tn = telnetlib.Telnet(HOST)

tn.read_until("login: ")

tn.write(user + "\n")

if password:
    tn.read_until("Password: ")
    tn.write(password + "\n")

tn.write("ls\n")

tn.write("exit\n")

print tn.read_all()

ssh: link

import pxssh
import getpass
try:                                                            
    s = pxssh.pxssh()
    hostname = raw_input('hostname: ')
    username = raw_input('username: ')
    password = getpass.getpass('password: ')
    s.login (hostname, username, password)
    s.sendline ('uptime')   # run a command
    s.prompt()             # match the prompt
    print s.before          # print everything before the prompt.
    s.sendline ('ls -l')
    s.prompt()
    print s.before
    s.sendline ('df')
    s.prompt()
    print s.before
    s.logout()
except pxssh.ExceptionPxssh, e:
    print "pxssh failed on login."
    print str(e)

【讨论】:

  • 非常感谢!我会努力让它发挥作用!
  • 该死,我的机器上没有 pxssh,除了我拥有的模块之外,我不应该使用任何其他模块:S 有没有办法通过 ssh 与子进程连接并还提供密码?
  • @sztyrymytyry 您可以尝试将密码提供给stdin
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2011-11-20
  • 2017-03-14
  • 2015-04-20
  • 2019-11-09
相关资源
最近更新 更多