0、写在前面
我们通常使用SSH 客户端来远程使用 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。但是即使是将端口设置为22之外的端口也容易泄露。为了保证服务器安全,此时希望使用密钥方式登录。而且使用秘钥登录能够避免每次登录时反复输入账户密码。
密码登录
- 优势
- 配置简单:只需要设个密码就行
- 登录简单:在任意设备上只需要输入账号密码就能登录目标服务器
- 劣势
- 麻烦:每次登录都需要输入账号密码
密钥登录
- 优势
- 快捷:避免每次登录时反复输入账户密码
- 安全:密钥文件相当于是超长超复杂的密码,暴力破解基本没戏,只有本地有密钥文件才能登录服务器
- 劣势
- 要从一台设备登录某台服务器,使用前必须先将密钥文件下载到该设备上
总结一下,根据辩证法的原理,优势和劣势都是相对的,没有十全十美的办法。
1、SSH密钥登录原理
1.1 密钥登录的原理是:
- 利用密钥生成器制作一对密钥——公钥和私钥。
- 将公钥添加到服务器的某个账户上,
- 将私钥下载到客户端,客户端利用私钥即可完成认证并登录。
1.2 非对称加密算法:
-
RSA加密算法是经典的非对称加密算法,其基本流程如下:
- 用密钥生成器构建一对密钥——公钥和私钥。然后将公钥安装到服务器,私钥发送到客户端。
- 服务器向客户端发送数据的时候用公钥进行加密,客户端收到数据后用私钥解密。
- 客户端向服务器发送数据的时候用私钥进行加密,服务器收到数据后用公钥解密。
缺点在于:如果公钥在传输中泄漏,则黑客可以用公钥破解客户端发送的数据。
1.3 ssh密钥认证登录原理
参考:
SSH公钥登录(私钥认证)原理
什么叫SSH?原理详解,看这一篇就够了!
2、配置SSH密钥登录
2.1 生成密钥对
密钥对的生成在本地电脑或者服务器都可以。
- 如果,你想不同服务器共用一个密钥对,那建议在本地电脑生成,之后将公钥分别上传到服务器并安装就行。
- 如果,你想不同服务器使用不同的密钥对,那建议在服务器端分别生成,再将私钥下载到客户端就行。
这边以服务器端生成密钥对举例。
首先登录到服务器后,在命令行输入命令,然后一路回车就行。
ssh-keygen
用来生成秘钥,如图:
第一步是确认保存秘钥的位置,一般使用默认的位置即可。
第二步是为秘钥设置一个密码, 第三步是确认密码。如果输入的话,即使被人有你的秘钥没有你的密码也是无法登录你的服务器的,这样会比较保险但也比较繁琐,直接回车表示不设置密码。
后面的信息是给出秘钥、公钥保存的位置和秘钥信息。 最终我们可以看到在 /home/username目录中生成了一个隐藏目录 .ssh。
里面包含两个密钥文件,id_rsa 为私钥,id_rsa.pub 为公钥。
2.2 在服务器上安装公钥
在命令行输入一下命令安装公钥:
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
如此便完成了公钥的安装。 此外,为了确保连接成功,输入如下指令以保证以下文件权限正确:
chmod 600 authorized_keys
chmod 700 ~/.ssh
命令意思:
对于安装好的公钥authorized_keys
, 让当前用户具有读写权限,其余用户没有任何权限,以防被人修改,当前用户就登录不了了。
对.ssh
目录,让当前用户具有可读可写可执行权限,其余用户没有任何权限,确保ssh正常工作。
2.3 配置SSH,打开秘钥登录功能、关闭密码登录功能(管理员做)
- 使用vim 编辑 /etc/ssh/sshd_config 文件
sudo vim /etc/ssh/sshd_config
- 然后按 i进入编辑模式,在空白位置新增输入:
RSAAuthentication yes
PubkeyAuthentication yes
此处便已经设置好了使用秘钥登录了,但是如果需要禁用密码登录可以进行如下设置:
PasswordAuthentication no
这一步最好是在能够用秘钥登录的前提下设置,不然秘钥又没法登录,又不能用密码登录,就麻烦了。
编辑完文本后按 ESC,输入:wq 保存文件并退出。
- 最后,输入如下指令重启 SSH 服务:
service sshd restart
2.4 将私钥下载到客户端,并登录
将.ssh文件夹中的私钥id_rsa下载到客户端,比如你的电脑,放在一个你不会删除的文件夹内,比如新建了一个 ssh 文件夹保存秘钥,为了便于管理 你也可以修改秘钥的文件名。
2.4.1 在MobaXterm中使用秘钥登录的操作
主要就是4、5步,勾选Use private key
,然后点击文件图标
选择刚才下载好的私钥文件,最后点OK就能成功登录了
2.4.2 在pycharm专业版配置ssh远程解释器
设置——项目——Python解释器——添加解释器——SSH
新建——输入主机名(IP)、端口、用户名
勾选密钥对,然后再然后点击文件图标
选择刚才下载好的私钥文件,(密码短语空着,保存密码短语勾不勾无所谓),再点下一步
密码字段不用输入,直接跳过,点下一步
出现如下界面就表示登录成功了
之后再去选择服务器目录下的python解释器就好了
参考链接
Ubuntu 设置 SSH 通过密钥登录