You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Paramiko连接Amazon Linux 2实例,服务器端无登录记录问题排查

排查Paramiko连接Amazon Linux 2实例无服务器端记录的问题

看起来你遇到的情况是代码看似在运行,但实际SSH连接并没有真正建立成功——毕竟服务器端w/who都没记录,程序还卡在input这里,大概率是连接过程卡在了某个环节没完成握手。我给你几个排查方向和解决办法:

1. 先给连接加超时+开启调试日志,快速定位问题

Paramiko默认没有超时设置,要是连接过程中因为网络、加密算法不兼容或者服务器端配置问题卡住,程序会一直挂着,你根本不知道哪里出问题。

修改代码,给connect加上超时参数,同时开启调试日志:

#!/usr/bin/env python3
import pprint
import boto3
import os
import paramiko
import logging

# 开启Paramiko调试日志,输出详细连接过程
logging.basicConfig(level=logging.DEBUG)

os.system('clear')
pp = pprint.PrettyPrinter(indent=4)
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 增加10秒超时,避免无限等待
client.connect('X.X.X.X',username='the_username',password='the_password',port=22, timeout=10)

# 先执行一个简单命令验证连接是否成功
stdin, stdout, stderr = client.exec_command('whoami')
print("Connected as:", stdout.read().decode().strip())

get_input = input("Preventing program from closing and keeping SSH connectiion alive...")

运行后如果连接失败,会直接抛出异常;如果成功,会打印出你的用户名,这时候再去服务器端看w/who,应该就能看到连接记录了。

2. 查看服务器端SSH日志,抓核心线索

Amazon Linux 2的SSH认证日志存在/var/log/secure里,在服务器端执行:

sudo tail -f /var/log/secure

然后运行你的Python程序,盯着日志看——不管连接成功还是失败,这里都会有记录:

  • 如果看到Accepted password for the_username from X.X.X.X port ...,说明连接成功了,那可能是w/who的显示延迟,或者你需要执行命令触发会话激活;
  • 如果看到Failed password或者error: no matching cipher found这类信息,就直接知道是认证失败还是加密算法不兼容了。

3. 检查服务器端SSH配置的细节

虽然你说已经开启了密码认证,但再确认下/etc/ssh/sshd_config里的几个关键项:

  • 确保PasswordAuthentication yes(没被注释,值是yes)
  • 确保ChallengeResponseAuthentication no(这个开启的话,可能会让Paramiko的密码认证流程出错)
  • 检查有没有AllowUsers/DenyUsers配置,限制了你的用户名或者来源IP
    改完配置后记得重启sshd:sudo systemctl restart sshd

4. 确认实例的安全组/网络ACL允许SSH流量

虽然你用常规SSH能连,但还是确认下:安全组的入站规则允许你的本地IP访问22端口,网络ACL也没有拦截SSH流量——毕竟有时候环境变化可能会导致这个问题。

内容的提问来源于stack exchange,提问作者slantalpha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:27:48