主要是为了安全考虑,暴露在公网上的服务器,如果用密码认证授权登陆,即使密码再复杂,也有被爆破的可能。而SSH密钥授权是一种更加简单安全的授权登录远程服务器的认证方式。
sudo lastb | wc -l
目录
一、生成SSH密钥对
尽量不要在目标服务器上进行SSH密钥对生成,因为生成密钥对后还需要将私钥复制到本地,这样私钥在网络传输过程有可能被截获。所以我们在本地设备上来生成密钥对,然后将公钥进行网络传输,导入到要访问的远程服务器上。
Windows:PuTTYgen
PuTTYgen是有名的开源小程序,也是有名的图形界面SSH客户端PuTTY的一部分。PuTTYgen小巧安全,可用于生成SSH密钥对十分简单。可以直接访问官网下载: https://www.puttygen.com/。生成密钥对的步骤官网给了很详细的介绍:
- You will see the PuTTY key generator dialog box on your screen
- You will find a “Generate” button in that dialog. Clicking on it will lead to generating the keys for you.
- Now you will need to add a unique key passphrase in the Key passphrase and Confirm passphrase field.
- Click on the “Save Public Key” and “Save Private Key” buttons to save your public and private keys.
- You will see the text starting with ssh-RSA in the Public key for pasting into OpenSSH authorized_keys file field which is located at the top of the window. Copy that entire text to your clipboard by pressing ctrl+c as you will require the key to paste on your clipboard in the public key tool of control panel or directly on the cloud server.
Linux:ssh-keygen
命令
直接在命令窗口输入ssh-keygen
。会有一些提示
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):
提示存储路径,直接用默认,回车即可。接着询问是否为生成的密钥对再设置一层密码
Enter passphrase (empty for no passphrase):
可置空,直接回车。最后输出
Your identification has been saved in /your_home/.ssh/id_rsa. Your public key has been saved in /your_home/.ssh/id_rsa.pub. The key fingerprint is: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host The key's randomart image is: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+
表示成功生成了私钥和公钥对。接下来要做的是将公钥复制到远程服务器。
二、将公钥复制到远程服务器
编辑远程服务器上的文件 ~/.ssh/authorized_keys
,将公钥文件中的内容复制并添加到文件的结尾。如果远程服务器上不存在~/.ssh
文件夹或authorized_keys
文件,直接创建mkdir ~/.ssh && touch ~/.ssh/authorized_keys
。
递归地置空~/.ssh
目录所在“组”的成员用户和“其他”(group,other)用户的所有权限,就是将权限只给创建用户。
chmod -R go= ~/.ssh
如果当前是用root用户为普通用户创建登陆授权密钥对,建议将权限压缩到普通用户,比如将创建用户从root
用户改为普通用户sammy
chown -R sammy:sammy ~/.ssh
如果是准备用root用户直接登陆服务器,那就不用做此安全设定。
三、将私钥保存到本地,并至少备份到三个其他地方
Windows上的.ssh目录一般在C:\Users\用户\.ssh
,其实也可以通过路径方式指定给各个SSH客户端,甚至可以文本方式将私钥的内容复制到某些SSH客户端,不同SSH客户端有不同调用私钥的方式。
可以网盘,邮箱,U盘都备份并记录。如果私钥丢失,而且服务器还没有救援模式的话,那就只能重装远程服务器的系统了,意味着将失去远程服务器上的资料。所以建议将私钥多地备份,最好公钥也同时多备份,防止远程服务器的误操作将公钥弄丢,如果有备份还能趁会话没关闭前重新导入公钥。
四、成功认证后,取消远程服务器密码登陆
以下操作,请确保至少有一个连接稳定的SSH会话,并确保用于远程登陆的用户是root或者具有sudo权限。
1. 编辑sudo vim /etc/ssh/sshd_config
,搜索PasswordAuthentication
,找到
PasswordAuthentication no
设置为no
,并取消注释,或者利用一键命令
sed -i 's/^#\?PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
即可禁用掉用户通过密码认证的方式登陆SSH到远程服务器。
2. 重启sshd
服务:
sudo systemctl restart ssh
3. 重开一个SSH会话,确保可以用SSH密钥方式登陆,然后就可以放心关闭连接中的SSH会话。
至此,便再也不用密码去登陆远程服务器了,同样攻击者也没法通过猜密码黑远程服务器。
参考
1. https://www.computerhope.com/unix/uchmod.htm
2. https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-10
评论前必须登录!
立即登录 注册