PVE新安装的Debian(適用於Linux),SSH服务已开启,密码正确却无法登陆

PVE新安装的Debian(適用於Linux),SSH服务已开启,密码正确却无法登陆

SSH故障排查


>本文適用於廣大Linux發行版


我们使用systemctl status sshd命令,可以看到ssh服务是处于正常运行状态的。

事实上我们可以通过ssh命令查找到主机,并要求输入密码时,就侧面证明了ssh服务在正常运行了。

但是为什么无法登陆,是因为ssh服务的配置文件,有两条默认的配置(被注释的)阻止了我们密码登陆root(我的ssh服务是Debian安装时预装的)

文件:/etc/ssh/sshd_config

文件来自Linux下面的/etc/ssh/sshd_config

(不要搞錯成 ssh_config !!)

我们可以使用vim打开文件后,在随意位置追加下面内容。也可以选择取消注释,但是PermitRootLogin后面的prohibit-password需要更改为yes

修改内容

我选择了追加内容在随意位置。配置如下:

PermitRootLogin yes
PasswordAuthentication yes

配置解释

其中PermitRootLogin yes是允许以 root 用户身份登录 SSH。PasswordAuthentication yes是启用基于密码的身份验证。

这个时候,保存并退出。之后重启ssh服务就可以正常ssh密码登录root了。


重启ssh服务:systemctl restart sshd

查看ssh服务:systemctl status sshd


下面命令帶 --now 意味著,開機自動啟動,現在也啟動ssh service。

關閉時也同理,如果帶 --now ,將馬上停止ssh service,並取消開機啟動。

開機自啟動ssh服務:systemctl enable --now sshd

關閉開機自啟動ssh服務:systemctl disable sshd


依舊無法連接(無響應到超時)

考慮可能是防火牆的問題,檢查一下PC是不是啟動了防火牆/IP不屬於一個網段。

我們先來看看如何解決前者,防火牆的問題。一般來說,Ubuntu / Arch的一些發行版,是自帶與啟動防火牆的。

UFW:

# 2選1
## 按照「端口」放行
sudo ufw allow 22/tcp 

## 按照「服務名」放行
sudo ufw allow ssh

# 查看防火牆狀態
sudo ufw status

firewalld:

# 2選1
## 按照「端口」放行
sudo firewall-cmd --permanent --add-port=22/tcp
sudo firewall-cmd --reload

## 按照「服務名」放行
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload

# 查看防火牆狀態
sudo firewall-cmd --list-services

iptables:

請注意,iptables 的規則有時只保存在當前PC狀態中,也就是說,會隨著你的關機再起動而導致放行規則失效,不同發行版持久化規則的方法都有所不同。

# 按照「端口」放行
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 查看防火牆狀態
sudo iptables -L INPUT -n -v

nftables:

# 按照「端口」放行
sudo nft add rule inet filter input tcp dport 22 accept

# 查看防火牆狀態
sudo nft list ruleset

請注意,nft add rule 方式加入的規則也需要另外保存,否則重啟依舊可能導致規則失效。


最後

一切完成後!我們此時只需要重啟 ssh 服務就好了!

sudo systemctl restart sshd

# 查看 ssh service 狀態
# sudo systemctl status sshd

確保IP在同一個網段中,確保在同一個Wi-Fi下。這回,再試試ssh上去

Done.