远程执行Python脚本遇SSH连接拒绝错误,求原因及解决方法
错误「ssh: connect to host 172.28.40.12 port 22: Connection refused」的原因
- 远程主机未启动SSH服务:SSH默认使用22端口,若远程机器的sshd(Linux)或OpenSSH服务(Windows)未运行,会直接拒绝连接请求。
- 防火墙拦截22端口:系统防火墙或网络防火墙可能禁止了22端口的入站SSH连接,导致请求被阻断。
- 网络连通性问题:远程主机IP错误、本地与远程不在同一子网,或路由配置异常,都会导致无法建立连接。可先通过
ping 172.28.40.12验证网络是否可达。 - SSH服务端口非默认22:若远程修改了SSH监听端口,未在命令中指定
-p 自定义端口参数,会连接失败。
修复连接并从本地远程运行Python脚本的方法
第一步:修复SSH连接问题
- 检查并启动远程SSH服务
- Linux:执行
systemctl status sshd查看状态,未启动则运行systemctl start sshd,设置开机自启systemctl enable sshd。 - Windows:打开「服务」管理器,找到「OpenSSH SSH Server」,确认状态为「正在运行」,未启动则右键启动并设置启动类型为「自动」。
- Linux:执行
- 开放防火墙22端口
- Linux:使用
ufw allow 22(ufw防火墙)或firewall-cmd --add-port=22/tcp --permanent && firewall-cmd --reload(firewalld)。 - Windows:在「Windows Defender防火墙高级设置」中添加入站规则,允许TCP协议的22端口连接。
- Linux:使用
- 验证SSH登录
执行ssh user@172.28.40.12,若能正常登录,说明连接问题已解决。
第二步:远程运行Python脚本的几种方式
方式一:管道传输脚本内容直接执行
将本地脚本内容通过SSH管道传给远程Python环境执行:
cat Sample.py | ssh user@172.28.40.12 python -
注:若远程Python命令为python3,需替换为python3。
方式二:先传脚本到远程再执行
- 用
scp将本地脚本传到远程主机:
scp Sample.py user@172.28.40.12:/home/user/
- 远程执行脚本:
ssh user@172.28.40.12 python /home/user/Sample.py
方式三:Windows远程桌面(RDP)场景下的操作
若使用RDP连接远程Windows机器:
- 开启远程桌面的文件共享,将本地脚本所在文件夹映射为远程机器的网络驱动器,直接在远程命令行运行脚本。
- 直接将本地脚本拖拽到远程桌面窗口,复制到远程机器后执行。
内容的提问来源于stack exchange,提问作者Harish Icon
相关产品推荐
相关产品推荐

