CentOS 7 sshd 好像不能用?

use*_*406 3 centos sshd docker

我开始了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 lor@131.181.10.150
ssh: connect to host 131.181.10.150 port 22: Operation timed out
Run Code Online (Sandbox Code Playgroud)

更新#2

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

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

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

$ sudo systemctl stop docker
$ sudo systemctl stop firewalld
Run Code Online (Sandbox Code Playgroud)

还是没有运气。

slm*_*slm 5

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

\n\n

1. 启动服务

\n\n

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

\n\n启动服务\n\n
$ sudo systemctl start sshd\n
Run Code Online (Sandbox Code Playgroud)\n\n检查状态\n\n
$ sudo systemctl status sshd\n\xe2\x97\x8f sshd.service - OpenSSH server daemon\n   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)\n   Active: active (running) since Tue 2018-07-24 22:24:00 EDT; 1h 40min left\n     Docs: man:sshd(8)\n           man:sshd_config(5)\n Main PID: 1270 (sshd)\n    Tasks: 1\n   CGroup: /system.slice/sshd.service\n           \xe2\x94\x94\xe2\x94\x801270 /usr/sbin/sshd -D\n\nJul 24 22:24:00 centos7 systemd[1]: Starting OpenSSH server daemon...\nJul 24 22:24:00 centos7 systemd[1270]: Executing: /usr/sbin/sshd -D\nJul 24 22:24:00 centos7 sshd[1270]: Server listening on 0.0.0.0 port 22.\nJul 24 22:24:00 centos7 sshd[1270]: Server listening on :: port 22.\nJul 24 22:24:00 centos7 systemd[1]: Started OpenSSH server daemon.\nJul 24 20:31:37 centos7 sshd[1582]: Accepted publickey for vagrant from 10.0.2.2 port 64437 ssh2: RSA SHA256:1vJymfZsu2KZ49lDftGMzz2VEb2Z2Y8PNi9cs55eHGE\nJul 24 20:43:29 centos7 systemd[1]: Trying to enqueue job sshd.service/start/replace\nJul 24 20:43:29 centos7 systemd[1]: Installed new job sshd.service/start as 560\nJul 24 20:43:29 centos7 systemd[1]: Enqueued job sshd.service/start as 560\nJul 24 20:43:29 centos7 systemd[1]: Job sshd.service/start finished, result=done\n
Run Code Online (Sandbox Code Playgroud)\n\n

2. 验证服务正在监听

\n\n检查是否监听端口 22 \n\n
$ sudo netstat -tlpn | grep sshd\ntcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1270/sshd\ntcp6       0      0 :::22                   :::*                    LISTEN      1270/sshd\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
$ ip a l eth0 | awk \'/inet / {print $2}\'\n192.168.56.101/24\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,您会在netstat输出中看到 192.168.56.101:22,例如。

\n\n

3. 防火墙

\n\n

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

\n\n
$ sudo firewall-cmd  --list-all\nFirewallD is not running\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
$ firewall-cmd  --list-all\npublic (active)\n  target: DROP\n  icmp-block-inversion: no\n  interfaces: eth0 eth1\n  sources:\n  services: ssh dhcpv6-client\n  ports:\n  protocols:\n  masquerade: no\n  forward-ports:\n  source-ports:\n  icmp-blocks:\n  rich rules:\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

4. 检查/etc/ssh/sshd_config

\n\n

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

\n\n
$ grep -vE \'^#|^$|AcceptEnv|HostKey|Syslog|MAC|Banner|LogLevel|Authorized\' /etc/ssh/sshd_config\nPermitRootLogin yes\nMaxAuthTries 4\nHostbasedAuthentication no\nIgnoreRhosts yes\nPermitEmptyPasswords no\nPasswordAuthentication yes\nChallengeResponseAuthentication no\nGSSAPIAuthentication yes\nGSSAPICleanupCredentials no\nUsePAM yes\nX11Forwarding no\nSubsystem   sftp    /usr/libexec/openssh/sftp-server\nProtocol 2\n
Run Code Online (Sandbox Code Playgroud)\n\n

5. 验证

\n\n

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

\n\n
$ timeout 2 curl -v telnet://192.168.56.101:22\n* Rebuilt URL to: telnet://192.168.56.101:22/\n*   Trying 192.168.56.101...\n* Connected to 192.168.56.101 (192.168.56.101) port 22 (#0)\nSSH-2.0-OpenSSH_7.4 \n$\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

6. 码头工人

\n\n

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

\n\n
$ docker network ls\nNETWORK ID          NAME                DRIVER              SCOPE\nbd7594c1dce3        bridge              bridge              local\ndb24b1e2be58        host                host                local\nedf606d533a5        none                null                local\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

参考

\n\n\n