新装的Debian (11) ssh连不上?
ssh 连接报: Port 22 Connection Refused?
或者出现以下情况?
可能有几个原因导致这种情况:
地址错误
请确保在 Debian 和 SSH 客户端在同一网络下,或者确保公网 IP 地址正确并且端口映射或穿透设置正确。同时,请确认 root 用户的密码是否正确。
没安装SSH服务
1.更新软件包列表:
sudo apt update
2.安装 SSH 服务器软件包(openssh-server):
sudo apt install openssh-server
3.安装完成后,SSH 服务器将自动启动。你可以使用以下命令检查 SSH 服务的状态:
sudo systemctl status ssh
出现
-bash: sudo: command not found
错误时,解决方法如下:
1.使用 root 账户:如果你已经以 root 账户登录系统,那么不需要使用 sudo 命令来执行命令,因为 root 用户已经具有所有权限。要切换到 root 账户,你可以使用
su
命令。在终端中输入以下命令,然后输入 root 用户的密码,即可切换到 root 账户:su -
2.安装 sudo 软件包:如果你不是以 root 账户登录系统,可以尝试安装 sudo 软件包。使用以下命令安装:
su -c "apt install sudo" #这将使用 root 权限安装 sudo 软件包
现在,你的 Debian 系统上已经安装并启动了 SSH 服务器。你可以尝试使用 SSH 客户端连接到该服务器。
SSH 服务未启动
确保 SSH 服务已经正确启动。你可以使用以下命令检查 SSH 服务的状态:
sudo systemctl status ssh
如果 SSH 服务未运行,你可以使用以下命令启动它:
sudo systemctl start ssh
如果想开机自启动 SSH 服务,可以使用以下命令:
sudo systemctl enable ssh
SSH 配置问题 #大概率
如果出现 SSH 配置错误,大概率是因为配置文件 /etc/ssh/sshd_config
中的设置不正确。请按照以下步骤进行检查和修正:
检查 /etc/ssh/sshd_config
文件中的 SSH 配置,确保以下设置正确:
Port
应设置为 22(或你指定的端口)。
PermitRootLogin
和 PasswordAuthentication
等选项设置正确。
1.使用 vim 或 vi 编辑配置文件:
sudo vim /etc/ssh/sshd_config
如果出现 -bash: vim: command not found
错误,请先安装 vim:
sudo apt install vim -y
如果安装 vim 报错,也可以使用 vi 进行编辑。vi 和 vim 的操作大同小异:
sudo vi /etc/ssh/sshd_config
2.在编辑配置文件时,请确保以下配置正确(使用 #
注释掉的需要删除 #
以启用配置):
Port 22 # SSH 使用的端口,可以自定义配置,默认使用 22
PermitRootLogin yes # 允许使用 Root 用户登录
PasswordAuthentication yes # 允许通过密码授权
PermitEmptyPasswords no # 不允许空密码
3.使用 vim 编辑时,正确的配置会显示为彩色,如果是白色,可能是输入错误或该配置无效。
4.在修改配置文件后,重启 SSH 服务使更改生效:
sudo systemctl restart ssh
防火墙问题
这些命令用于添加临时规则,只在当前会话中有效,重启后将失效。为了使规则持久化,你需要根据使用的防火墙工具进行相应的配置。
新安装的 Debian 发行版通常会默认安装 iptables 软件包,但不会预先配置防火墙规则,因此防火墙功能并未启用。管理员需要手动配置并启用防火墙以保护系统安全,可选择使用 iptables、nftables、ufw 或 firewalld 等工具进行设置。
1.iptables:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
优化:如果需要规则持久化,可以将规则保存到文件中并使用 iptables-persistent
包:
1.在设置完 iptables 规则后,保存当前规则到文件中:
sudo iptables-save > /etc/iptables/rules.v4 # IPv4 规则保存到文件
sudo ip6tables-save > /etc/iptables/rules.v6 # IPv6 规则保存到文件
2.配置 iptables-persistent
包使其在系统启动时加载保存的规则文件:
sudo systemctl enable netfilter-persistent
这样,在系统重启后,iptables-persistent
包会自动加载之前保存的规则文件,从而使得你设置的 iptables 规则持久化生效。
2.nftables:
sudo nft add rule inet filter input tcp dport 22 accept
优化:同样,可以将规则保存到文件中并在启动时加载:
1.将规则保存到文件中:
sudo nft list ruleset > /etc/nftables.conf
2.配置 nftables 在系统启动时加载规则文件:
在 Debian 系统中,你可以使用 systemd 来管理 nftables。创建一个 systemd 服务单元文件来加载规则文件。
创建 /etc/systemd/system/nftables.service
文件,并添加以下内容:
[Unit]
Description=Netfilter Tables (nftables) ruleset
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/nft -f /etc/nftables.conf
[Install]
WantedBy=multi-user.target
然后启用该服务:
sudo systemctl enable nftables.service
现在,当系统启动时,nftables 将加载 /etc/nftables.conf
文件中的规则。
3.ufw:
sudo ufw allow 22/tcp
这个命令已经包含了持久化配置,无需额外优化。
4.firewalld:
sudo firewall-cmd --zone=public --add-port=22/tcp --permanent
sudo firewall-cmd --reload
这个命令也已经包含了持久化配置,无需额外优化。
确保根据你的需求选择合适的命令,并根据需要将规则持久化,以确保在系统重启后规则仍然有效。