【linux】linux设置ssh密钥登录详细教程,附Mobaxterm和pycharm ssh python解释器配置教程

0、写在前面

我们通常使用SSH 客户端来远程使用 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。但是即使是将端口设置为22之外的端口也容易泄露。为了保证服务器安全,此时希望使用密钥方式登录。而且使用秘钥登录能够避免每次登录时反复输入账户密码。

密码登录

  • 优势
    • 配置简单:只需要设个密码就行
    • 登录简单:在任意设备上只需要输入账号密码就能登录目标服务器
  • 劣势
    • 麻烦:每次登录都需要输入账号密码

密钥登录

  • 优势
    • 快捷:避免每次登录时反复输入账户密码
    • 安全:密钥文件相当于是超长超复杂的密码,暴力破解基本没戏,只有本地有密钥文件才能登录服务器
  • 劣势
    • 要从一台设备登录某台服务器,使用前必须先将密钥文件下载到该设备上

总结一下,根据辩证法的原理,优势和劣势都是相对的,没有十全十美的办法。

1、SSH密钥登录原理

1.1 密钥登录的原理是:

  1. 利用密钥生成器制作一对密钥——公钥和私钥。
  2. 将公钥添加到服务器的某个账户上,
  3. 将私钥下载到客户端,客户端利用私钥即可完成认证并登录。

1.2 非对称加密算法:

在这里插入图片描述

  • RSA加密算法是经典的非对称加密算法,其基本流程如下:

    • 用密钥生成器构建一对密钥——公钥和私钥。然后将公钥安装到服务器,私钥发送到客户端。
    • 服务器向客户端发送数据的时候用公钥进行加密,客户端收到数据后用私钥解密。
    • 客户端向服务器发送数据的时候用私钥进行加密,服务器收到数据后用公钥解密。

缺点在于:如果公钥在传输中泄漏,则黑客可以用公钥破解客户端发送的数据。

1.3 ssh密钥认证登录原理

在这里插入图片描述
参考:
SSH公钥登录(私钥认证)原理
什么叫SSH?原理详解,看这一篇就够了!

1.4 .ssh/里面的文件作用解释

id_rsa :私钥,与公钥配对使用。公钥加密的数据用私钥可以解密。既然是私,就不要乱发给别人,不然
id_rsa.pub :公钥,公钥相当于你的机器的身份信息。你想登录别台机器,你就把公钥发给他,并叫他安装到authorized_keys。
authorized_keys: 里面记录了服务器授权的所有公钥
known_hosts:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

2、配置SSH密钥登录

建议流程:

用户在本地个人电脑生成一个密钥对,然后将公钥上传并安装到服务器上。具体流程参考:2.3 在服务器上安装公钥

2.1 配置SSH,打开秘钥登录功能、关闭密码登录功能(管理员做)

  1. 使用vim 编辑 /etc/ssh/sshd_config 文件
sudo vim /etc/ssh/sshd_config
  1. 然后按 i进入编辑模式,在空白位置新增输入:
RSAAuthentication yes
PubkeyAuthentication yes

此处便已经设置好了使用秘钥登录了,但是如果需要禁用密码登录可以进行如下设置:

PasswordAuthentication no

这一步最好是在能够用秘钥登录的前提下设置,不然秘钥又没法登录,又不能用密码登录,就麻烦了。

编辑完文本后按 ESC,输入:wq 保存文件并退出。

  1. 最后,输入如下指令重启 SSH 服务:
sudo service sshd restart

设置好之后,无法使用密码登录,直接ssh username@xx.xx.xx.xx,如果没有配置好公私钥,会返回Permission denied (publickey)

2.2 生成密钥对

在命令行输入

 ssh-keygen

然后一路回车就行,生成秘钥,如图:
在这里插入图片描述
第一步是确认保存秘钥的位置,一般使用默认的位置即可。
第二步是为秘钥设置一个密码, 第三步是确认密码。如果输入的话,即使别人有你的秘钥没有你的密码也是无法登录你的服务器的,这样会比较保险但也比较繁琐,直接回车表示不设置密码。
后面的信息是给出秘钥、公钥保存的位置和秘钥信息。
最终我们可以看到在 /home/username目录中(windows在C:\Users\username)生成了一个隐藏目录 .ssh,里面包含两个密钥文件,id_rsa 为私钥,id_rsa.pub 为公钥。

2.3 在服务器上安装公钥

首先进入 /home/username/.ssh/,如果没有./ssh,那就创建然后进入

sudo mkdir /home/username/.ssh/
cd  /home/username/.ssh/
  • 安装方法1:将id_rsa.pub上传到./ssh目录。然后在命令行输入以下命令安装公钥,其实就是将id_rsa.pub的内容添加到authorized_keys
cat id_rsa.pub >> authorized_keys
  • 安装方法2:上传太麻烦了,直接打开id_rsa.pub,复制其中内容,然后粘贴到authorized_keys中即可。如果已经有其他公钥了,记得换行再粘贴
vim authorized_keys

如此便完成了公钥的安装。 此外,为了确保连接成功,输入如下指令以保证以下文件权限正确

chown username.username -R /home/username/.ssh/
chmod 600 authorized_keys 
chmod 700 ~/.ssh

命令意思:

  1. 确保.ssh及其子目录的所有者必须是当前用户。
  2. 对于安装好的公钥authorized_keys, 让当前用户具有读写权限,其余用户没有任何权限,以防被人修改,当前用户就登录不了了。
  3. .ssh目录,让当前用户具有可读可写可执行权限,其余用户没有任何权限,确保ssh正常工作。

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解释器就好了
在这里插入图片描述

2.4.3 ssh、scp命令行使用密钥登录

第一次需要用 -i 指定私钥文件,之后就不用了,很方便的!!!
ssh

ssh -i ~/.ssh/id_rsa username@10.123.78.125

ssh的使用方法

usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]

scp

scp -i  ~/.ssh/id_rsa  -r 要传输的文件地址 username@10.123.78.125:目标目录地址

scp的使用方法

usage: scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
            [-J destination] [-l limit] [-o ssh_option] [-P port]
            [-S program] source ... target

3、报错解决

3.1 Permissions 0644

  • 错误信息:

Permissions 0644 for ‘/home/xxxx/.ssh/my_id_rsa’ are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

  • 解决办法:
    按照错误提示,意思是:my_id_rsa这个文件太开放了,要求私钥文件不能被其他人访问。
    所以只要将所属组和其他人的read权限取消即可。
    0644其实就是表示my_id_rsa这个文件的权限是644,要变得不那么open,那就把权限设成600,
chmod 600 my_id_rsa

参考链接

Ubuntu 设置 SSH 通过密钥登录

  • 13
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

繁星知微

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值