2

我最近编写了一个小脚本来获取本地网络中的操作 ssh 服务器列表,因为如果不将计算机连接到屏幕并进行查找(这将消除对 ssh 的需要),我不知道计算机的 IP 地址。因为我有多个 ssh 服务器,所以我想知道哪个 ip 地址属于一台计算机。为此,我想使用 ssh 横幅来识别计算机。由于使用 ssh 库来获得横幅和学习体验会有点过大,我想使用套接字来实现它。

Atm 我在 python 中有这个:

from socket import socket
s = socket()
s.connect((ip,22))
s.send(s.recv(100)) # send the ssh version back

直到这里它才起作用,并且从套接字读取会给出支持的加密算法列表。我应该发回一份算法列表和我的mac地址(我还没有成功)。我尝试发送从服务器获得的列表,但之后我没有得到任何响应。

根据文档,服务器可以随时发送横幅。当我使用普通的 ssh 客户端时,它会在我登录之前显示横幅,所以我认为我不需要经历整个身份验证过程。

使用套接字获取 ssh 横幅的最简单方法是什么?

(代码不必在 python 中)

4

1 回答 1

0

使用 paramiko- 一个用 python 编写的 ssh 客户端包装器,代码可以很容易地重新用于抓取横幅

# !/usr/bin/python

import paramiko


def grab_banner(ip_address, port):
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
        client.connect(ip_address, port=port, username='username', password='bad-password-on-purpose')
    except:
        return client._transport.get_banner()


if __name__ == '__main__':
    print grab_banner('192.168.1.26', 22)
  • 有同样的问题,尝试使用原始套接字,但看到横幅是在 ssh 加密密钥交换后发送的(为了抓取横幅而实施过大)
于 2016-06-09T23:39:47.667 回答