如何在Python中使用Paramiko带SSH端口选项连接远程服务器
如何在Python中使用Paramiko带SSH端口选项连接远程服务器
嗨,我来帮你搞定这个问题!你刚才遇到的坑其实很多人刚用Paramiko时都会踩——命令行里我们习惯用-p来指定SSH端口,但Paramiko的连接逻辑和命令行不一样,不能把端口拼在主机名后面哦。
你之前把XXX.XXX.XXX.XXX -p55555当作主机名传给Paramiko,它根本识别不了后面的-p55555是端口参数,这就是连接失败的原因。正确的做法是把主机地址和端口完全分开,通过Paramiko的connect()方法的独立参数来指定端口。
给你一个直接能用的代码示例,你替换成自己的信息就行:
import paramiko # 先把连接信息拆成独立的变量 hostname = "XXX.XXX.XXX.XXX" ssh_username = "你的SSH用户名(就是命令里的ID)" ssh_password = "你的SSH登录密码" ssh_port = 55555 # 这里直接写纯数字的端口号,不用加-p前缀 # 初始化SSH客户端对象 ssh_client = paramiko.SSHClient() # 自动添加未记录的主机密钥(如果是生产环境,建议改用load_system_host_keys()来更安全地管理主机密钥) ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 建立连接,专门用port参数指定端口 ssh_client.connect( hostname=hostname, username=ssh_username, password=ssh_password, port=ssh_port ) print("远程服务器连接成功啦!") # 举个小例子,执行一条远程命令验证一下 stdin, stdout, stderr = ssh_client.exec_command("whoami") # 读取命令输出并打印 print(f"当前远程登录用户:{stdout.read().decode().strip()}") finally: # 不管连接成功还是失败,最后都要记得关闭连接 ssh_client.close()
如果你的服务器是用密钥登录而不是密码,也可以轻松调整:把password=ssh_password换成key_filename="/path/to/你的私钥文件"就好,比如key_filename="~/.ssh/id_rsa"(记得替换成你实际的私钥路径)。
总结一下核心点:Paramiko不识别命令行式的-p标记,只需要把端口号单独传给connect()的port参数,就能正确连接到指定端口的SSH服务了。
备注:内容来源于stack exchange,提问作者JH KIM
相关产品推荐
相关产品推荐

