use*_*406 3 centos sshd docker
我开始了sudo systemctl start sshd
,但无法从外部连接到 CentOS 7 机器。但是,在 CentOS 7 机器上我可以通过ssh
.
我错过了什么?
我根据slm的回答确认了以下内容:
sshd
服务已启动并绑定到 IP 131.181.10.150 上的端口 22curl -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)
我记得当我使用它时docker-compose
,它开始下载容器,突然我失去了启动ssh
连接的能力。
ip link show
查看使用打开的NIC的接口数量docker0
以及许多其他接口。
然后我尝试禁用 Docker 服务和防火墙,但仍然无法连接。
$ sudo systemctl stop docker
$ sudo systemctl stop firewalld
Run Code Online (Sandbox Code Playgroud)
还是没有运气。
有了sshd
服务,设置和开始就非常简单。
确保服务已启动并在端口 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$ 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 地址:
$ 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,例如。
接下来检查防火墙是否允许网络流量到达端口 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 流量进入。
/etc/ssh/sshd_config
验证您/etc/ssh/sshd_config
没有阻止外部连接。以下选项的设置应类似于我在下面显示的内容。
$ 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您可以从外部客户端之一使用如下命令进行确认:
\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
。
在某些情况下,例如安装了 Docker 的情况下,您将遇到docker0
桥接器在桥接器内添加多个虚拟网络的情况docker0
。你可以像这样看到它们:
$ 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>
即可删除超出标准bridge
、host
和 的任何内容none
。
归档时间: |
|
查看次数: |
8034 次 |
最近记录: |