Loading... # 解决 `ssh: connect to host IP port 22: Connection timed out` 报错(scp 传文件指定端口) 在使用 `scp` 命令传输文件时,常见的错误之一是 `ssh: connect to host IP port 22: Connection timed out`。这个错误通常意味着无法连接到目标主机的 SSH 服务,可能由多种原因引起。本文将详细介绍如何解决该错误,并在 `scp` 传文件时指定端口。  ## **常见原因及解决方法** ### **1. 检查 SSH 服务是否运行** 首先,确保目标主机的 SSH 服务正在运行。可以通过以下命令在目标主机上检查 SSH 服务状态: ```bash sudo systemctl status ssh ``` 如果服务没有运行,可以使用以下命令启动: ```bash sudo systemctl start ssh ``` ### **2. 确认防火墙配置** 目标主机上的防火墙可能阻止了 SSH 连接。确保防火墙允许 SSH 端口(默认端口是22)的连接。 #### **Ubuntu 防火墙配置** ```bash sudo ufw allow 22/tcp sudo ufw reload ``` #### **CentOS 防火墙配置** ```bash sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --reload ``` ### **3. 确认目标主机的 IP 和端口** 确保使用的 IP 地址和端口号是正确的。如果目标主机的 SSH 服务运行在非默认端口,可以通过以下方法指定端口: ```bash scp -P [端口号] [源文件] [目标用户]@[目标IP]:[目标路径] ``` 例如,如果 SSH 服务运行在 2222 端口,可以使用: ```bash scp -P 2222 file.txt user@192.168.1.10:/path/to/destination ``` ### **4. 检查网络连接** 确保本地主机和目标主机之间的网络连接正常。可以使用 `ping` 命令检查网络连通性: ```bash ping 192.168.1.10 ``` 如果无法 ping 通,可能是网络配置问题,需要进一步排查网络连接。 ### **5. 检查主机名解析** 如果使用主机名而不是 IP 地址,确保主机名可以正确解析。可以通过以下命令检查: ```bash nslookup hostname ``` ### **6. 检查本地主机防火墙配置** 有时本地主机的防火墙也会阻止出站 SSH 连接。确保本地主机允许通过 SSH 端口进行连接。 #### **Ubuntu 防火墙配置** ```bash sudo ufw allow out 22/tcp sudo ufw reload ``` ## **示例:使用 `scp` 指定端口传输文件** 假设需要从本地主机将文件 `file.txt` 传输到目标主机 `192.168.1.10`,且目标主机的 SSH 服务运行在端口 2222,可以使用以下命令: ```bash scp -P 2222 file.txt user@192.168.1.10:/path/to/destination ``` ## **分析说明表** | 步骤 | 命令或操作 | 说明 | | ------------------ | ------------------------------------------------------------------------------- | ---------------------------------------- | | 检查 SSH 服务状态 | `sudo systemctl status ssh` | 确认目标主机的 SSH 服务正在运行 | | 启动 SSH 服务 | `sudo systemctl start ssh` | 启动 SSH 服务 | | 配置防火墙允许 SSH | `sudo ufw allow 22/tcp` / `sudo firewall-cmd --permanent --add-port=22/tcp` | 确保防火墙允许通过 SSH 端口连接 | | 指定端口传输文件 | `scp -P 端口号 源文件 用户@IP:目标路径` | 使用 `scp` 命令传输文件并指定端口 | | 检查网络连通性 | `ping 目标IP` | 确认本地主机和目标主机之间的网络连接正常 | | 检查主机名解析 | `nslookup 主机名` | 确保主机名可以正确解析为 IP 地址 | | 配置本地主机防火墙 | `sudo ufw allow out 22/tcp` | 确保本地主机允许通过 SSH 端口出站连接 | ## **思维导图** ```plaintext 解决 SSH "Connection timed out" 报错 └── 检查 SSH 服务 └── 确认服务状态 ├── 启动服务 └── 检查配置 └── 配置防火墙 ├── 目标主机防火墙 └── 本地主机防火墙 └── 指定端口传输文件 └── 使用 -P 参数 └── 检查网络连接 ├── ping 测试 └── 排查网络问题 └── 检查主机名解析 └── 使用 nslookup ``` ## **总结** 解决 `ssh: connect to host IP port 22: Connection timed out` 报错涉及检查 SSH 服务状态、防火墙配置、网络连通性和主机名解析等多个方面。通过逐步排查上述问题,并在 `scp` 命令中正确指定端口,可以有效解决连接超时的问题,确保文件传输的顺利进行。希望本文提供的解决方案能帮助您快速定位并解决该错误。 最后修改:2024 年 07 月 04 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏