ssh配置

我们一般通过ssh连接VPS服务器,这里有两个条件:VPS上运行ssh服务,本地运行ssh客户端。一般网络服务的架构都是这种C/S架构(客户端/服务器端)。就像微信APP连接腾讯的微信服务器,大家才能聊天。

服务端

Linux一般都安装和运行了ssh服务,可以运行systemctl status sshd查看ssh服务状态,没有的话执行如下命令。

# 安装ssh服务
dnf install -y openssh-server
# 启动ssh服务并设置为开机启动
systemctl enable --now sshd

客户端

一般介绍

Windows上常用的图形界面ssh客户端有putty、moba等等,输入服务器地址、端口号、用户名、密码就能登录上去了。

Windows上还有ssh客户端命令行工具。在Windows 10中,在“设置”中查看“可选功能”,确认是否安装了“OpenSSH 客户端”,没有的话就安装一下,这时候运行“cmd”打开命令行环境,执行如下命令,看看ssh命令是否存在。

C:\Users\test>where ssh
C:\Windows\System32\OpenSSH\ssh.exe

运行ssh [-p port] user@ip连接服务器,如果port是默认的22,则可以不用带-p port。

C:\Users\test>ssh -p 22 root@127.0.0.1
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:kNxwoLgfOAlBQ8iIVNjVaWBicRAYal2M5mOyEkznwpo.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

如果第一次登录ssh服务器的话,会显示这个服务器的指纹(一个独一无二的服务器ID)。这里需要手动输入“yes”。

root@127.0.0.1's password: 

然后输入密码,这里输入密码不会回显,不要以为是键盘坏了。

如果重装Linux,这个服务器指纹会变,再用ssh登录就会提示指纹不对,无法登录。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:kNxwoLgfOAlBQ8iIVNjVaWBicRAYal2M5mOyEkznwpo.
Please contact your system administrator.
Add correct host key in C:\\Users\\test/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in C:\\Users\\test/.ssh/known_hosts:22
Host key for 127.0.0.1 has changed and you have requested strict checking.
Host key verification failed.

这时需要把本地保存的服务器指纹删除。根据这一行信息:“Offending ED25519 key in C:\Users\test/.ssh/known_hosts:22”,把C:\Users\test\.ssh\known_hosts的第22行删掉就可以了。

免密码登录

ssh还支持不用输入密码就可以直接登录,这就需要密钥。

先介绍一下非对称加密,使用者有一对密钥,公钥和私钥,公钥是公开的,任何人使用公钥加密一段数据发给使用者,使用者用私钥解密才能解开,没有私钥就解不开,因此这种加密方式也可以用作身份验证。

免密码登录的机制是这样的

  • ssh客户端生成一对密钥,将公钥保存到服务器上
  • ssh服务器根据登录客户端的用户名和ip检索到公钥,随机生成一个字符串加密后发给客户端
  • ssh客户端解密后将字符串发还给服务器,字符串一样的话就通过认证

执行如下操作生成和放置密钥

  • 运行ssh-keygen -t ed25519,在C:\Users\test\.ssh下会生成id_ed25519、id_ed25519.pub两个文件,其中id_ed25519.pub就是公钥。
  • 将id_ed25519.pub的内容追加到服务器的/root/.ssh/authorized_keys文件
  • 运行chmod 0600 /root/.ssh/authorized_key,确保authorized_keys的文件权限

主机别名

在C:\Users\test\.ssh\config中定义主机别名,可以更快捷的登录ssh。

Host test
        HostName xx.xx.xx.xx
        Port 22
        User root

运行ssh test就相当于运行ssh -p 22 root@xx.xx.xx.xx

sftp

ssh不但可以登录服务器,还可以传送文件。

下载一个WinSCP,输入ssh登录信息,就可以上传下载文件,注意传输协议要选择sftp。

高级设置

互联网上有很多程序在扫描ssh端口并且尝试暴力破解。登录ssh能看到如下信息,从上次登录成功到现在有n次失败的登录,就是有人在尝试破解。

Last failed login: Fri Jan  3 12:02:00 CST 2025 from 185.147.124.182 on ssh:notty
There were 71 failed login attempts since the last successful login.
Last login: Fri Jan  3 11:44:02 2025 from x.x.x.x

可以通过设置增加破解的难度。

修改ssh端口

互联网上的黑客程序都是扫描ssh的默认端口,修改端口会减少很多风险。

  • 修改/etc/ssh/sshd_config,将“Port 22”改成“Port 10086”,就把ssh的端口改成10086。
  • 如果Port前面有“#”,需要删掉这个字符。配置文件中,“#”后面的内容会被忽略。
  • 重启ssh服务,让新的端口生效。
  • 将新端口添加到防火墙。

使用fail2ban

fail2ban可以把登录失败次数超过限制的IP封掉。

  • 安装fail2ban。
  • 运行cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,生成jail.local文件。
  • 修改 jail.local 中的sshd块
[sshd]
# 启动sshd保护
enabled = true
# 设置ssh端口,没有修改ssh端口的话可以保持不变
port = 10086
# 失败3次就封ip
maxretry = 3
# 永久封禁
bantime = -1
  • 重启fail2ban服务
  • 查看状态 fail2ban-client status
  • 查看被封的ip fail2ban-client get sshd banned
  • 解封某个ip fail2ban-client unban x.x.x.x

暂无介绍....

延伸阅读:

部署deepseek-r1

最近DeepSeek-R1模型很火,我也蹭个热点,本文介绍如何在VPS上使用Ollama部署DeepSeek-R1模型,...

leon
2025年2月23日
MySQL备份与还原

我们的VPS可能会硬盘损坏需要重装OS,或者运营商跑路了,所以需要定时备份数据库,以防不测。备份使用mysqldump导...

leon
2025年2月22日
SSH隧道

这章继续介绍基础知识,前面讲到有的服务在127.0.0.1监听,外网无法访问,我们怎么访问呢,可以用SSH隧道。什么是S...

leon
2025年2月20日
部署第一个网络服务

前面介绍了不少基础知识,今天介绍如何部署一个网站,demo在这里。下面是一些前面介绍过的预备知识:- Caddy介绍- ...

leon
2025年2月19日
域名介绍

什么是域名?这个正常人都知道,就不介绍了。为什么有一个域名是极好的,可以查看前面的文章。如何获取免费域名?1. Free...

leon
2025年2月17日