近来查看Digital Ocean的Droplet登陆日志,发现用作梯子节点的Droplet经常受到来自江苏连云港某IP的SSH密码穷举攻击。
于是博主关闭了该Droplet的SSH密码登录,改用密钥对登录,以杜绝穷举攻击的可能。
使用密钥对登陆,需要创建一个新的SSH密钥对(包含公钥和私钥,公钥提供给VPS服务商,私钥用于登录),我们用Linux系统自带的ssh-keygen
命令来生成这个密钥对。
/root/.ssh/
目录用来存储Linux系统生成的SSH密钥对,我们首先检查一下,该目录是否为空。
$ cd ~/.ssh $ ls
若该目录里已经有(filename).pub
和(filename)
这样的同名文件对,则代表已经有生成好的秘钥对。如果不知道已经存在的密钥对的用途,请不要随意覆盖或删除。
我们现在用ssh-keygen
命令创建新的密钥对:
$ ssh-keygen
输出如下:
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):
注意,此处不要覆盖已经存在的密钥对,我们将新生成密钥对命名为test
:
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /root/.ssh/test
然后提示是否要给公钥设置密码,如果不需要密码,留空即可:
Enter passphrase (empty for no passphrase): Enter same passphrase again:
确认完毕后,会生成密钥对,并给出公钥的SHA256指纹:
Your identification has been saved in /root/.ssh/test. Your public key has been saved in /root/.ssh/test.pub. The key fingerprint is: SHA256:HUN5j/NqUt1A18lLr1jVPf/KIIcTSdk/5KOjJBwJF0M root@shadow-in-singapore The key's randomart image is: +---[RSA 2048]----+ | .E..+ . =| | . .o+ o o=*| | o ooo B.o=| | o.ooo O.o| | .S..o B *.| | o = B + o| | o * = . | | o o o | | o | +----[SHA256]-----+
现在再检查一下/root/.ssh
/目录:
$ cd ~/.ssh $ ls
输出如下,可以看到我们刚才生成的test
密钥对已经在目录里了(test.pub
是公钥,test
是私钥):
authorized_keys test test.pub
用cat
命令打印出公钥test.pub
的内容:
$ cat test.pub
输出如下,复制公钥内容提供给VPS服务商即可:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt35H/CTdcJf38j/ xbljWv+TLYS6qpbYm79MDuHtwtjduskzerm4lT6apqlMWS2MOibGE/ pKzIEQRtn7Poi0swXDtqgBTFaji98mI8J918PWkrNuyYZfSascriu8 nXJAxsUX8EcZPkTghzaVBmPK0tHXvX94rxyhPJIbj9eMjeQsb6fsti kopS2Xt6kM7wCquDTjJrcPa6RrYrPTnpXtWf7K92Yd+yNKFeV4zf9+ UAU/pGo6U4rf7O5sxtzVI08i2Nsbgnm/Jr3rtn/lvAX8M56V1py9L5 76rqpSkmrjyhIC1ssWEUB2Iyelu+B3dwPjFT87hZzog+8Ahu/Oh9Em oF root@shadow-in-singapore
同理,用cat
命令打印出test
私钥的内容:
$ cat test
将私钥内容保存在本地,另存为test.pem
私钥文件。
在使用SSH客户端登陆该Droplet时,指定该私钥文件为秘钥即可。
若使用Termius:在File - Preference - Keychain
中添加新的Key,将私钥内容复制到Private Key
区块,登陆时指定该Key即可。
若使用Putty:则需要用PuttyGen工具将test.pem
私钥文件转换为test.ppk
,登陆时指定转换过的新私钥即可。