ubuntu安装配置ssh-connect to host localhost port 22: Connection refused

在安装ssh,经常出现 ssh:
connect to host localhost port 22: Connection refused

从以下几点去检查:

1.是否安装ssh-server:

打开"终端窗口",输入"sudo
ps -e |grep ssh"-->回车-->有sshd,说明ssh服务已经启动,如果没有启动,输入"sudo service ssh start"-->回车-->ssh服务就会启动。若无sshd:

打开"终端窗口",输入"sudo
apt-get install openssh-server"-->回车-->输入"y"-->回车-->安装完成。

2.命令行用户名输错:

ssh [email protected]
,注意很多情况下user不对造成了这个问题,有时root并不能登录,需要当前用户名

passwd
root:修改root密码

3.关闭或修改防火墙配置:

参看IPTables基本命令

4.配置文件:

使用gedit修改配置文件"/etc/ssh/sshd_config"

打开"终端窗口",输入"sudo gedit /etc/ssh/sshd_config"-->回车-->把配置文件中的"PermitRootLogin without-password"加一个"#"号,把它注释掉-->再增加一句"PermitRootLogin yes"-->保存,修改成功。

或修改查看其它配置参数

IPTables基本命令

在向大家介绍复杂防火墙规则之前,还是先上一些简单的料,让大家对IPTables最为基本的命令有一些简单了解。

首先要说明的是IPTables命令必需以root权限运行,这意味着你需要使用root身份登录或者能够有权限使用su或sudo -i取得root Shell。下面的内容中我们都使用sudo,这也是Ubuntu系统上的首选方法。

最好的起点就是先通过“-L”参数来查看下当前系统的所有IPTables规则:

sudo iptables -L

我们可以看到Linux中都有的3个常用默认链(INPUT、OUTPUT和FORWARD),同时也可以看到每个链的缺省策略(每个链对默认策略都是接受),在此我们可以看到Ubuntu中并没有添加任何默认规则集。

如果你希望通过命令来查看每个链的默认规则,可以使用“-S”参数:

sudo iptables -S

如果你看到IPTables里面已经有规则了,并希望取消这些规则后重新更配置话,可以使用“-F”参数来清空已有的规则集:

sudo iptables -F

虽然“-F”参数可以清空并刷新链中所有的现有规则集,但并不会对链的默认策略进行更改。因此,如果你是在更改远程VPS防火墙策略的话需要在“-F”清空所有规则时先将INPUT和OUTPUT链的默认策略恢复到ACCEPT,以免规则清空后SSH连接被阻断。要做到这一点可执行如下命令:

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

在配置好允许SSH连接后(下面介绍),再将INPUT和OUTPUT链的默认规则更改为DROP即可。

创建自已的IPTables规则

现在就要开始为我们的VPS创建自定义的防火墙规则啦,正如上篇文章中所说,由于INPUT链会处理所有连接到服务器的入站数据包,因此我们的所有操作都与INPUT链有关。现在先来配置服务器允许SSH连接。

完整命令应该是这样的:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

大多朋友可能会觉得看起来怎么这么复杂,那我们来逐一分拆说明下。

  • -A INPUT :表明我们要将此规则追加到某个链的最后,由于我们要操作INPUT链接,所以这么写。
  • -m conntrack :iptables除了自己的核心功能外还只有一些实用的扩展和模块,这个参数表明添加conntrack模块提供的能力。(conntrack模块可以根据先前的连接来确定数据包之间的关系)
  • –ctstate :该参数是conntrack模块提供的,它可以确定如何用现在的数据包去匹配先前获得的数据包。ESTABLISHED值将自动允许现有连接的数据包,RELATED值将允许已建立连接的相关数据包。(这样就与SSH会话特性相匹配上了)
  • -j ACCEPT :这个参数用于指定匹配的数据包的目标。用在这里表示接受和允许符合上述标准的数据包通过。

配置好后我们来看一下:

sudo iptables -L

现在,你应该已经知道IPTables的基本语法了,下面我们继续添加规则打怪,以期尽快升级为高手。

接受其它必要连接

大家的VPS上一般SSH服务的22端口,Web服务器的80端口及Mysql的3306端口都是需要打开的,不然怎么对外提供服务呢。因此我们也需要通过如下命令在IPTables中打开这些端口:

sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT

为了保证我们的VPS能够正常运行,还需要添加一条允许规则。通常,计算机上的服务都会发送网络数据包以保持彼此之间的通信。而这种通信会利用到一个名叫loopback的伪网卡将流量引导回自己。因此,我们还需要为loopback网卡添加一条允许规则。

sudo iptables -I INPUT 1 -i lo -j ACCEPT
  • -I INPUT 1 :与“-A”不同,它可以指定要将规则添加到该链的位置。

实施Drop规则

前面讲的内容其实都是基于一个前提假设的,但事先我们需要先把防火墙的2种常用模式说明一下。一种是明确定义允许通过防火墙的规则,不匹配的都丢弃。另外一种是明确定义拒绝通过防火墙的规则,其余的都允许。我们的前提假设采用的就是第一种方式,这样配置起来相对简单,规则也较少,也更加安全。

前面我们已经为INPUT链接定义了一些允许规则,但默认INPUT链是允许所有包,所以我们现在需要将INPUT链的默认规则更改为“Drop”即丢弃。通过如下命令完成更改:

sudo iptables -P INPUT DROP

查看和保存配置

IPTables的配置是立即生效的,前面已经介绍过,在配置好之后我们可以直接用“-L”参数进行查看,这里再另外增加一个“–line-numbers”参数,它主要用于显示行数,对于规则较多时的查看非常方便。

sudo iptables -L --line-numbers

虽然IPTables的命令执行后会立即生效,但这个生效过程其实是临时的,系统在重启之后便会丢失。因此,我们还需要将这些配置添加到配置文件当中,以保证系统在下次重启后会自动载入我们的IPTables防火墙规则。

sudo apt-get update
sudo apt-get install iptables-persistent

该命令脚本下载执行后会询问我们是否对IPTables配置进行保存,如果确定的话选择“是”即可。保存后下次重启系统也不会造成配置丢失了。

时间: 2024-10-09 20:46:27

ubuntu安装配置ssh-connect to host localhost port 22: Connection refused的相关文章

ssh: connect to host localhost port 22: Connection refused (2)

命令:ssh localhost 错误信息:ssh: connect to host localhost port 22: Connection refused 错误原因: 1.sshd 未安装 2.sshd 未启动 3.防火墙 解决方法: 1.确定安装sshd:  sudo apt-get install openssh-server 2.启动sshd: net start sshd 3.检查防火墙设置 检验方法: 输入命令:ssh localhost 若成功,则表示安装成功,且连接通过: 转

Ubuntu下 ssh : connect to host localhost port 22:Connection refused

Ubuntu下测试ssh时使用ssh localhost 命令,出现错误提示connect to host localhost port 22:Connection refused 造成这个错误的原因可能是ssh-server未安装或者未启动.ubuntu 11.10 默认安装openssh-client,但是木有安装server 运行 ps -e | grep ssh,查看是否有sshd进程 如果没有,说明server没启动,通过 /etc/init.d/ssh -start 启动server

ssh: connect to host localhost port 22: Connection refused

1.确定安装sshd: [html] view plaincopy $ sudo apt-get install openssh-server 2.启动sshd: [html] view plaincopy $ sudo net start sshd [html] view plaincopy $ sudo ufw disable 检验方法: 输入命令: [html] view plaincopy $ ssh localhost 若成功,则表示安装成功,且连接通过: 转载:http://blog

Linux--ssh: connect to host localhost port 22: Connection refused

今日在进行SSH免密码登陆的时候,使用SSH进行测试,抛出下面异常 ssh: connect to host localhost port 22: Connection refused 在网上收了下,答复很多,基本都是 1.没启动SSH 2.没安装SSH 3.没关防火墙 4.-. ,千篇一律. 上面的解决方案我都看了,但是还是不好使. 调研了些关于SSH的资料,内容如下, SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能(使用TCP的22号端口).SSH协议对通信双方的

mac connect to host localhost port 22: Connection refused

在Mac OS X 10.10.5学习hadoop的过程中,输入命令ssh localhost得到 ssh: connect to host localhost port 22: Connection refused 解决方法是选择系统偏好设置->选择共享->点击远程登录 然后再输入命令ssh localhost发现已经解决问题 找到解决方案来自于 http://stackoverflow.com/questions/6313929/how-do-i-open-port-22-in-os-x-

hadoop启动start-all.sh出错(master: ssh: connect to host master port 22: Connection refused)

当我们打开系统输入hadoop启动命令start-all.sh时出现以下错误: [[email protected] ~]# start-all.sh starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-root-namenode-master.out master: ssh: connect to host master port 22: Network is unreachable master: ss

ssh: connect to host IPADDR port 22: Connection timed out on ubuntu

可以从以下几个方面检查 1 vi /etc/ssh/sshd_config: 然后将这两项的注释号去掉 Port 22 Protocol 2 2 检查sshd服务 sudo service ssh status. 3 检查名字是否一致 /etc/hostname, and /etc/hosts. 4 检查防火墙. sudo service ufw status 5 查看tcp端口22 [email protected]:~$ netstat -nat | grep :22 tcp       

Git配置非22端口,解决:ssh: connect to host xxx port 22: Connection timed out fatal: The remote end hung up unexpectedly

背景:私自搭建了Git服务器,而Git本身就是SSH进行连接的,而Git命令上默认只能通过22端口实现. 解决方法: 第一种: 在系统的用户目录下的文件夹:.ssh 如果该路径下没有config文件,则创建一个. config中添加如下内容: 如是以域名访问的则添加如下内容:(注意修改xxx为你的远程仓库的名称) Host xxx HostName xxx.com Port 3333 如是以IP访问的,则添加如下内容:(注意修改IP为你的远程仓库IP) Host "211.111.xx.xxx&

<Linux> Ubuntu error: ssh: connect to host master port 22: No route to host lost connection

iptables当找到匹配的规则时,就会执行相应的动作,而不会向下继续匹配.因为ssh端口开放的规则在all规则之后,所以永远都不会匹配到,也就是ssh永远被禁止. root下执行:iptables -I INPUT -p tcp --dport 22 -j ACCEPT 即可.