0、写在前面
我们通常使用SSH 客户端来远程使用 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。但是即使是将端口设置为22之外的端口也容易泄露。为了保证服务器安全,此时希望使用密钥方式登录。而且使用秘钥登录能够避免每次登录时反复输入账户密码。
密码登录
- 优势
- 配置简单:只需要设个密码就行
- 登录简单:在任意设备上只需要输入账号密码就能登录目标服务器
- 劣势
- 麻烦:每次登录都需要输入账号密码
密钥登录
- 优势
- 快捷:避免每次登录时反复输入账户密码
- 安全:密钥文件相当于是超长超复杂的密码,暴力破解基本没戏,只有本地有密钥文件才能登录服务器
- 劣势
- 要从一台设备登录某台服务器,使用前必须先将密钥文件下载到该设备上
总结一下,根据辩证法的原理,优势和劣势都是相对的,没有十全十美的办法。
1、SSH密钥登录原理
1.1 密钥登录的原理是:
- 利用密钥生成器制作一对密钥——公钥和私钥。
- 将公钥添加到服务器的某个账户上,
- 将私钥下载到客户端,客户端利用私钥即可完成认证并登录。
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,打开秘钥登录功能、关闭密码登录功能(管理员做)
- 使用vim 编辑 /etc/ssh/sshd_config 文件
sudo vim /etc/ssh/sshd_config
- 然后按 i进入编辑模式,在空白位置新增输入:
RSAAuthentication yes
PubkeyAuthentication yes
此处便已经设置好了使用秘钥登录了,但是如果需要禁用密码登录可以进行如下设置:
PasswordAuthentication no
这一步最好是在能够用秘钥登录的前提下设置,不然秘钥又没法登录,又不能用密码登录,就麻烦了。
编辑完文本后按 ESC,输入:wq 保存文件并退出。
- 最后,输入如下指令重启 SSH 服务:
sudo service sshd restart
设置好之后,无法使用密码登录,直接ssh username@xx.xx.xx.xx
,如果没有配置好公私钥,会返回Permission denied (publickey)
2.2 生成密钥对
密钥对的生成在本地电脑或者服务器都可以。
- 如果,你想不同服务器共用一个密钥对,那建议在本地电脑生成,之后将公钥上传到服务器并安装就行。
- 如果,你想不同服务器使用不同的密钥对,那无所谓。
这边以服务器端生成密钥对举例,客户端也一样,比如windows打开cmd输入命令就行。
首先登录到服务器后,在命令行输入命令,然后一路回车就行。
ssh-keygen
用来生成秘钥,如图:
第一步是确认保存秘钥的位置,一般使用默认的位置即可。
第二步是为秘钥设置一个密码, 第三步是确认密码。如果输入的话,即使别人有你的秘钥没有你的密码也是无法登录你的服务器的,这样会比较保险但也比较繁琐,直接回车表示不设置密码。
后面的信息是给出秘钥、公钥保存的位置和秘钥信息。
最终我们可以看到在 /home/username目录中生成了一个隐藏目录 .ssh,里面包含两个密钥文件,id_rsa 为私钥,id_rsa.pub 为公钥。
2.3 在服务器上安装公钥
首先进入 /home/username/.ssh/
,如果没有./ssh
,那就创建;如果没有id_rsa.pub
,那就上传到该目录。
然后在命令行输入以下命令安装公钥,其实就是将id_rsa.pub
的内容添加到authorized_keys
cd ~/.ssh
cat id_rsa.pub >> authorized_keys
如此便完成了公钥的安装。 此外,为了确保连接成功,输入如下指令以保证以下文件权限正确
chmod 600 authorized_keys
chmod 700 ~/.ssh
命令意思:
对于安装好的公钥authorized_keys
, 让当前用户具有读写权限,其余用户没有任何权限,以防被人修改,当前用户就登录不了了。
对.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.文章来源:https://www.toymoban.com/news/detail-642386.html
- 解决办法:
按照错误提示,意思是:my_id_rsa
这个文件太开放了,要求私钥文件不能被其他人访问。
所以只要将所属组和其他人的read权限取消即可。
0644其实就是表示my_id_rsa
这个文件的权限是644,要变得不那么open,那就把权限设成600,
chmod 600 my_id_rsa
参考链接
Ubuntu 设置 SSH 通过密钥登录文章来源地址https://www.toymoban.com/news/detail-642386.html
到了这里,关于【linux】linux设置ssh密钥登录详细教程,附Mobaxterm和pycharm ssh python解释器配置教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!