Python中如何通过SSH登录并获取服务器Banner信息
Python中如何通过SSH登录并获取服务器Banner信息
11 回复
如题
帖子回复:
用 paramiko 库就行,直接连SSH,抓Banner信息。下面给个完整例子:
import paramiko
import socket
def get_ssh_banner(hostname, port=22, timeout=5):
"""
获取SSH服务器的Banner信息
Args:
hostname: 服务器地址
port: SSH端口,默认22
timeout: 连接超时时间,默认5秒
"""
try:
# 创建socket连接
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(timeout)
sock.connect((hostname, port))
# 创建SSH客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 获取Banner信息
transport = paramiko.Transport(sock)
transport.start_client()
banner = transport.get_remote_server_key().get_name()
print(f"服务器: {hostname}:{port}")
print(f"Banner信息: {banner}")
print(f"完整响应: {transport.remote_version}")
# 清理连接
transport.close()
sock.close()
return {
'host': hostname,
'port': port,
'banner': banner,
'full_version': transport.remote_version
}
except socket.timeout:
print(f"连接超时: {hostname}:{port}")
except ConnectionRefusedError:
print(f"连接被拒绝: {hostname}:{port}")
except Exception as e:
print(f"错误: {str(e)}")
return None
# 使用示例
if __name__ == "__main__":
# 测试连接
result = get_ssh_banner("example.com", 22)
# 如果需要认证登录后再获取信息
def ssh_login_and_get_info(hostname, username, password, port=22):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(hostname, port, username, password, timeout=5)
print("登录成功")
# 执行命令获取系统信息
stdin, stdout, stderr = ssh.exec_command("uname -a")
system_info = stdout.read().decode().strip()
print(f"系统信息: {system_info}")
ssh.close()
return system_info
except paramiko.AuthenticationException:
print("认证失败")
except Exception as e:
print(f"连接错误: {str(e)}")
# 登录示例(需要有效凭证)
# ssh_login_and_get_info("example.com", "username", "password")
代码说明:
- 先用
socket建立TCP连接,这样能控制超时 - 通过
paramiko.Transport获取SSH协议层面的Banner get_remote_server_key()拿到服务器密钥信息remote_version属性包含完整的SSH版本字符串
安装依赖:
pip install paramiko
要点:
- 这个方法不依赖认证,直接获取SSH服务信息
- 如果服务器改了默认端口,记得改
port参数 - 超时设置避免长时间等待
一句话建议: 用paramiko的Transport直接拿Banner最可靠。
大佬 我看过了 没看懂 你能给个例子吗
你也太懒了
老铁,扎心了,自己好好看看吧。。。。学习一下。。
我主要是看不懂英文 要用翻译软件一点点弄
程序员看不懂英文也太说不过去了。
带上你的 Chrome+Google Tranlate 插件,一次把整个网页译了不就得了
from paramiko import SSHClient
client = SSHClient()
client.load_system_host_keys()
client.connect(‘192.168.2.225’,22,‘user’,‘passwd’)
stdin, stdout, stderr = client.exec_command(‘ls -l’)
for line in stdout:
print(’… ’ + line.strip(’\n’))

