CentOS 7 sshd 好像不能用?

CentOS 7 sshd 好像不能用?

我开始了sudo systemctl start sshd,但无法从外部连接到 CentOS 7 机器。但是,在 CentOS 7 机器上我可以通过ssh.

我错过了什么?

更新#1

我根据slm的回答确认了以下内容:

  • sshd服务已启动并绑定到 IP 131.181.10.150 上的端口 22
  • 我可以执行curl -v telenet://131.181.10.150:22并看到“已连接”消息。

我的问题是当我尝试ssh连接服务器时:

$ ssh [email protected]
ssh: connect to host 131.181.10.150 port 22: Operation timed out

更新#2

我记得当我使用docker-compose它时,它开始下载容器,突然我失去了启动连接的能力ssh

ip link show查看使用打开的NIC的接口数量docker0以及许多其他接口。

然后我尝试禁用 Docker 服务和防火墙,但仍然无法连接。

$ sudo systemctl stop docker
$ sudo systemctl stop firewalld

还是没有运气。

答案1

有了sshd服务,设置和开始就非常简单。

1. 启动服务

确保服务已启动并在端口 22 上运行/侦听。

启动服务
$ sudo systemctl start sshd
检查状态
$ sudo systemctl status sshd
● sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-07-24 22:24:00 EDT; 1h 40min left
     Docs: man:sshd(8)
           man:sshd_config(5)
 Main PID: 1270 (sshd)
    Tasks: 1
   CGroup: /system.slice/sshd.service
           └─1270 /usr/sbin/sshd -D

Jul 24 22:24:00 centos7 systemd[1]: Starting OpenSSH server daemon...
Jul 24 22:24:00 centos7 systemd[1270]: Executing: /usr/sbin/sshd -D
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on 0.0.0.0 port 22.
Jul 24 22:24:00 centos7 sshd[1270]: Server listening on :: port 22.
Jul 24 22:24:00 centos7 systemd[1]: Started OpenSSH server daemon.
Jul 24 20:31:37 centos7 sshd[1582]: Accepted publickey for vagrant from 10.0.2.2 port 64437 ssh2: RSA SHA256:1vJymfZsu2KZ49lDftGMzz2VEb2Z2Y8PNi9cs55eHGE
Jul 24 20:43:29 centos7 systemd[1]: Trying to enqueue job sshd.service/start/replace
Jul 24 20:43:29 centos7 systemd[1]: Installed new job sshd.service/start as 560
Jul 24 20:43:29 centos7 systemd[1]: Enqueued job sshd.service/start as 560
Jul 24 20:43:29 centos7 systemd[1]: Job sshd.service/start finished, result=done

2. 验证服务正在监听

检查是否监听22端口
$ sudo netstat -tlpn | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1270/sshd
tcp6       0      0 :::22                   :::*                    LISTEN      1270/sshd

您还需要验证是否sshd正在侦听所有接口 (0.0.0.0) 或至少侦听系统的 IP 地址:

$ ip a l eth0 | awk '/inet / {print $2}'
192.168.56.101/24

因此,您会在输出中看到netstat192.168.56.101:22,例如。

3. 防火墙

接下来检查防火墙是否允许网络流量到达端口 22。

$ sudo firewall-cmd  --list-all
FirewallD is not running

如果是这样,那么流量可以到达端口 22。如果是这样:

$ firewall-cmd  --list-all
public (active)
  target: DROP
  icmp-block-inversion: no
  interfaces: eth0 eth1
  sources:
  services: ssh dhcpv6-client
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

它允许ssh&dhcpv6-client服务的流量,并丢弃其他所有服务的流量。同样,这没问题,应该允许 SSH 流量进入。

4. 检查/etc/ssh/sshd_config

验证您/etc/ssh/sshd_config没有阻止外部连接。以下选项的设置应类似于我在下面显示的内容。

$ grep -vE '^#|^$|AcceptEnv|HostKey|Syslog|MAC|Banner|LogLevel|Authorized' /etc/ssh/sshd_config
PermitRootLogin yes
MaxAuthTries 4
HostbasedAuthentication no
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding no
Subsystem   sftp    /usr/libexec/openssh/sftp-server
Protocol 2

5. 验证

您可以从外部客户端之一使用如下命令进行确认:

$ timeout 2 curl -v telnet://192.168.56.101:22
* Rebuilt URL to: telnet://192.168.56.101:22/
*   Trying 192.168.56.101...
* Connected to 192.168.56.101 (192.168.56.101) port 22 (#0)
SSH-2.0-OpenSSH_7.4 
$

笔记:如果您在此处看到“已连接到 XXXX”IP 地址消息,则没有任何东西会阻止从运行的客户端计算机curlsshd服务器的网络流量。

6. 码头工人

在某些情况下,例如安装了 Docker 的情况下,您将遇到桥接器在桥接器docker0内添加多个虚拟网络的情况docker0。你可以像这样看到它们:

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
bd7594c1dce3        bridge              bridge              local
db24b1e2be58        host                host                local
edf606d533a5        none                null                local

在这些情况下,您需要删除任何额外的网络来恢复物理网络,以便它能够正确路由 SSH 数据包。只需使用该命令docker network rm <net id>即可删除超出标准bridgehost和 的任何内容none

参考

相关内容