Contents
使用VPS已经大半年时间了,期间我一直通过SSH的方式管理VPS,本期来和大家分享一下我利用SSH管理VPS的几个值得注意的地方,以及如何极大限度的做到相对安全。
交流群:Newlearnerの水群
修改默认SSH 端口
一般的商家默认的SSH端口是22,搬瓦工等商家除外,是给定的随机高位端口。默认22端口作为SSH端口带来的问题是有些人会使用肉鸡进行弱端口扫描,一旦扫描成功,立即进行弱管理员名称(很多为admin、root)和弱密码尝试爆破。所以很多人在长期不登录VPS之后常常会发现输入lastb
之后有很多尝试登陆但是fail的例子。
好多人说我们可以使用denyhost
这样的工具来防止,一旦检测到同一个ip多次登录失败,就ban掉。但是对于强迫症患者和完美主义者来讲,最治本的方法还是直接修改SSH端口。
修改/etc/ssh/sshd_config
文件:
1 2 3 4 5 6 |
#进入SSH配置文件 vi /etc/ssh/sshd_config #找到以下内容,去掉原本注释并修改端口号 Port 6666 #重启ssh服务 service sshd restart |
禁止Root用户登录
在禁用root用户远程登录之前,我们需要创建一个普通用户,创建好之后修改SSH配置文件即可
1 2 3 4 5 6 7 8 9 10 11 |
#创建一个普通用户 adduser username #为这个普通用户设置密码(不得过于简单) passwd username #将新建的普通用户要添加到组 usermod -a -G groupA user #修改SSH配置文件,查找“#PermitRootLogin yes”,将前面的“#”去掉,短尾“yes”改为“no” vi /etc/ssh/sshd_config PermitRootLogin no #重启SSH服务 service sshd restart |
此时我们应该用命令ssh -p port username@your ip/hostname
来进行SSH 远程登录
使用 RSA 密钥对登陆 SSH
密钥对生成
如果你使用的是macOS或者Linux,直接到终端输入ssh-keygen -b 2048
即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
root@debian:~# ssh-keygen -b 2048 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:6utX3d3cx9/i8L8EI/UzrePpsz8YynVWyHYk+/7si3Y root@debian-s-1vcpu-1gb-nyc1-01 The key's randomart image is: +---[RSA 2048]----+ | | | . .| | o = | | . * +| | S o = X=| | . . oo++@| | . .. + Bo+| | . . o *=E+| | .+o .+OX@| +----[SHA256]-----+ |
如果你使用的是Windows,请借助PuTTYgen来生成密钥对:
密钥对上传
对于macOS和Linux用户,直接输入ssh-copy-id -i ~/.ssh/id_rsa -p port<USERNAME>@<HOST>
即可将私钥上传至服务器。
对于Windows用户,通过PuTTYgen获取密钥之后,将其内容复制到.ssh/authorized_keys
里面即可(PuTTY导出的密钥有时候会分行,请注意删除多余的换行符,authorized_keys里面可以放多个密钥,一行一个分开即可)。
仅允许密钥登录
做完以上步骤,想要登录我们的VPS只剩下两种途径了。一个是得知你新建的普通用户名+密码,另一个是在自己生成密钥的电脑上面通过新建的普通用户名登录。为了进一步保险起见,我们继续设置仅允许密钥登录。
在服务器上进入 /etc/ssh/sshd_config
修改如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 |
# 启用公钥认证 PubkeyAuthentication yes # 禁用密码认证 PasswordAuthentication no # 不允许空密码登陆 PermitEmptyPasswords no #RSA认证 RSAAuthentication yes #验证文件路径 AuthorizedKeysFile .ssh/authorized_keys #重启SSH服务 service sshd restart |
进一步简化SSH登录步骤
到此我们已经可以在本机上面通过用户名+密钥的方式登陆了,省去了输入密码的步骤并且在一定程度上面提升了安全性。对于macOS和Linux用户,我们还可以借助SSH config
进一步简化我们的登录步骤。
对于一个有着很多VPS,不愿意去记冗长的ip和域名的用户来讲,除了选择一个好用的SSH客户端软件之外,SSH config
也可以发挥其自身的优势。
SSH config是Open SSH 客户端配置文件,允许你以配置项的形式,记录各个服务器的连接信息,并允许你使用一个定义好的别名来代替其对应的 ssh 命令参数。
首先在.ssh目录下面创建一个config文件:vi .ssh/config
接着在其中填写上如下信息并保存:
1 2 3 4 5 |
Host myhost Hostname example.server.com Port 6666 User username Identityfile ~/.ssh/id_rsa |
一个配置中可以添加多个Host主机,使用时只需在终端输入ssh myhost
即可,省去了输入ssh -p port -i 私钥路径 username@your ip/hostname
的繁琐步骤。
HostName
需要ssh连接过去的主机名,一般是IP地址,也可以用%h
来替代命令行参数。
User
登录主机的用户名
IdentityFile
认证证书文件,默认位置是~/.ssh/id_rsa
, ~/ssh/id_dsa
等,如果采用默认的证书,可以不用设置此参数,除非你的证书放在某个自定义的目录,那么你就需要设置该参数来指向你的证书。
Port
SSH访问主机的端口号,默认是22端口,同上,只有在非默认情况下才需要设置该值。
其他
以上是常用的参数,其他参数可以在命令行通过man ssh_config
来查看。
推荐的SSH客户端软件
- Terminal.app:macOS和Linux自带,不解释
- Finalshell:我曾经和开发组成员之一有过一段时间的交流,他向我安利了这款神器。支持macOS、Windows、Linux,自带sftp、内网穿透、VPS性能监控(cpu内存网络io等)、海外服务器加速。(本质是挂代理上SSH,降低断线的风险)我个人也十分推荐,并且支持多VPS管理,十分方便,功能强大
- Xshell:Windows上面一款强大的SSH工具,国区的销售权被毒瘤马克丁拿到了(口区)
- Putty:Windows上面免费的SSH工具,能用
- Hyperapp:一款较为全能的SSH客户端软件,适用于iOS。除了可以做到SSH以及各种监控外,这个软件还提供了一些环境以及代理的一键安装功能,十分适合新手了。现在在美区有售
- Termius:全平台支持的SSH工具,功能中规中矩。
- 待补充……