ubuntu16.04 ssh连接出现connect to host localhost port 22: Connection refused 解决办法

本文详细介绍了在Ubuntu系统中解决SSH服务安装问题的过程,包括检查SSHD服务状态,安装openssh-server及其依赖的openssh-client,处理版本冲突,以及安装后的服务启动确认和防火墙配置。

出现上述问题,需要一步一步排除查看

查看是否安装sshd

命令:

ps -e|grep ssh

若下面有内容出现,说明ssh服务启动
在这里插入图片描述

若什么也没出现说明未安装,则先安装ssh-server

安装openssh-server

sudo apt-get install openssh-server

结果出现了这样的错误
openssh-server : Depends: openssh-client (=1:7.2p2-4)

E: Unable to correct problems, you have held broken packages.

说明要安装的openssh-server依赖于openssh-client的,但ubuntu自带的openssh-client版本与所要安装的openssh-server所依赖的版本不同,因此重新安装openssh-client

sudo apt-get install openssh-client=1:7.2p2-4

中间询问Y/N,输入Y就好。
安装好openssh-client后,再接着安装openssh-server

sudo apt-get install openssh-server

安装好后,查看ssh服务,有内容出现,说明服务已启动

查看防火墙状态,若为active,关闭防火墙
我的防火墙是关闭的

sudo ufw status #查看防火墙状态
sudo ufw disable #关闭防火墙

ssh连接成功

ssh username@IPaddress
<think>我们正在解决的是:在配置SSH免密登录时,执行`scp authorized_keys hadoop102:$PWD`(或类似命令)出现"ssh: connect to host hadoop102 port 22: Connection refused"错误。 根据引用[2]和引用[3]中的信息,这个问题通常是由于目标主机(hadoop102)上的SSH服务没有运行导致的。因此,我们需要确保hadoop102上的SSH服务已经启动并正在监听22端口。 解决步骤: 1. **检查目标主机(hadoop102)的SSH服务状态**: 首先,我们需要登录到hadoop102主机上(如果无法直接登录,可能需要通过其他方式,比如控制台),然后检查SSH服务是否正在运行。 在hadoop102上执行: ```bash sudo systemctl status sshd # 对于使用systemd的系统(如Ubuntu 16.04+,CentOS 7+) # 或者 sudo service ssh status # 对于使用SysVinit的系统 ``` 如果服务没有运行,我们需要启动它。 2. **启动SSH服务**: 如果发现SSH服务没有运行,使用以下命令启动: ```bash sudo systemctl start sshd # systemd系统 # 或者 sudo service ssh start # SysVinit系统 ``` 3. **确保SSH服务开机自启(可选但推荐)**: ```bash sudo systemctl enable sshd # systemd系统 # 或者 sudo update-rc.d ssh enable # 某些SysVinit系统 ``` 4. **检查目标主机上的SSH服务是否在监听22端口**: 在hadoop102上执行: ```bash sudo netstat -tuln | grep 22 ``` 应该可以看到类似以下的输出,表明SSH服务正在监听22端口: ``` tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN ``` 5. **检查防火墙设置**: 如果SSH服务已经运行,但仍然无法连接,可能是防火墙阻止了22端口。在hadoop102上检查防火墙设置: - 对于使用ufw的系统(如Ubuntu): ```bash sudo ufw status # 如果22端口没有允许,则允许 sudo ufw allow 22 ``` - 对于使用firewalld的系统(如CentOS): ```bash sudo firewall-cmd --list-ports # 如果没有开放22端口,则添加 sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload ``` - 对于使用iptables的系统: ```bash sudo iptables -L # 如果22端口被阻止,添加规则 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo service iptables save # 保存规则 ``` 6. **验证连接**: 在源主机(比如hadoop101)上再次尝试连接hadoop102的22端口,可以使用telnet或ssh命令: ```bash telnet hadoop102 22 # 或者 ssh hadoop102 -v # 使用详细模式,会显示连接过程 ``` 7. **如果上述步骤都无效,检查目标主机的hosts.allow和hosts.deny文件**: 有时,SSH服务可能被配置为只允许特定IP访问。检查以下文件: ```bash /etc/hosts.allow /etc/hosts.deny ``` 确保没有规则拒绝来自源主机的连接。 8. **重新尝试拷贝公钥**: 在确保hadoop102的SSH服务正常运行后,回到源主机(hadoop101)上,重新执行拷贝公钥的命令: ```bash ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_user@hadoop102 # 或者如果你使用的是scp方式,比如: scp ~/.ssh/authorized_keys hadoop102:~/.ssh/ ``` 注意:在拷贝公钥时,确保目标主机上的目标用户(比如hadoop_user)的home目录下的.ssh目录存在,并且权限正确(通常为700),authorized_keys文件的权限为600。 引用[2]中提到,在Docker容器中安装Hadoop时,因为没有开启ssh服务导致连接被拒绝,启动ssh服务后问题解决。引用[3]中则是在传递公钥时出现同样的错误,但没有明确说明解决方法,但根据上下文,同样应该是SSH服务未启动的问题。 因此,重点就是确保目标主机上的SSH服务已经启动并运行在22端口,且防火墙允许连接。 生成相关问题: </think>### 解决 SSH 公钥拷贝失败的 "Connection refused" 错误 当您在执行 `ssh-copy-id` 或 `scp` 命令向 `hadoop102` 传递公钥时出现 `ssh: connect to host hadoop102 port 22: Connection refused` 错误,说明目标主机的 SSH 服务未正常运行。以下是系统化的排查步骤: --- #### **1. 验证目标主机 SSH 服务状态** 登录到 `hadoop102` 主机(通过物理控制台或云平台控制台),执行: ```bash # 检查 SSH 服务状态(Ubuntu/Debian) sudo systemctl status ssh # 检查 SSH 服务状态(CentOS/RHEL) sudo systemctl status sshd ``` - ✅ **若服务未运行**:启动服务 ```bash sudo systemctl start ssh # Ubuntu/Debian sudo systemctl start sshd # CentOS/RHEL ``` - ❌ **若启动失败**: - 检查配置文件语法:`sudo sshd -t` - 查看日志:`journalctl -u ssh --since "5 minutes ago"` - 修复后重启服务:`sudo systemctl restart sshd` [^2] --- #### **2. 确认 SSH 守护进程监听端口** 在 `hadoop102` 执行: ```bash sudo netstat -tuln | grep :22 ``` - **期望输出**: ``` tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN ``` - ❌ **若无输出**: - 修改配置文件: ```bash sudo nano /etc/ssh/sshd_config ``` 取消注释或添加: ```ini Port 22 ListenAddress 0.0.0.0 # 监听所有IP ``` - 重启服务:`sudo systemctl restart sshd` --- #### **3. 检查防火墙规则** 在 `hadoop102` 执行: ```bash # Ubuntu/Debian sudo ufw status # CentOS/RHEL sudo firewall-cmd --list-ports ``` - 🔥 **若 22 端口未开放**: ```bash sudo ufw allow 22 # Ubuntu/Debian sudo firewall-cmd --add-port=22/tcp --permanent # CentOS/RHEL sudo firewall-cmd --reload ``` --- #### **4. 验证网络连通性** 在源主机执行: ```bash ping hadoop102 # 检查域名解析 telnet hadoop102 22 # 检查端口可达性 ``` - ❌ **若 `telnet` 失败**: - 确认 `/etc/hosts` 配置正确(如 `192.168.1.102 hadoop102`)[^1] - 检查网络设备(交换机/路由器)是否屏蔽 22 端口 --- #### **5. 重新执行公钥拷贝** 服务正常后,在源主机执行: ```bash # 标准方法(推荐) ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_user@hadoop102 # 或手动拷贝 scp ~/.ssh/id_rsa.pub hadoop_user@hadoop102:~/.ssh/authorized_keys ``` > **权限要求**:目标主机 `~/.ssh` 目录权限需为 `700`,`authorized_keys` 文件权限需为 `600`。 --- #### **关键排查流程图** ```mermaid graph TD A[Connection refused] --> B{检查 SSH 服务状态} B -->|未运行| C[启动 sshd 服务] B -->|已运行| D{检查端口监听} D -->|未监听22端口| E[修改 sshd_config] D -->|正常监听| F{检查防火墙} F -->|阻止22端口| G[开放防火墙] F -->|已放行| H{检查网络连通} H -->|ping 不通| I[检查DNS/hosts] H -->|telnet 失败| J[检查路由/交换机] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值