linux使用密钥登录

前言

通常SSH设备采用密码登录方式。但一般的密码方式登录,容易被暴力破解,安全性不足。为保证安全性,可以使用密钥方式登录。

密码登录

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

密钥登录

#优势
快捷:避免每次登录时反复输入账户密码
安全:密钥文件相当于是超长超复杂的密码,暴力破解基本没戏,只有本地有密钥文件才能登录服务器
#劣势
要从一台设备登录某台服务器,使用前必须先将密钥文件下载到该设备上
总结一下,根据辩证法的原理,优势和劣势都是相对的,没有十全十美的办法。

一、SSH密钥登录原理

1.1 密钥登录的原理是:

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

1.2 非对称加密算法:

RSA加密算法是经典的非对称加密算法,其基本流程如下:
用密钥生成器构建一对密钥——公钥和私钥。然后将公钥安装到服务器,私钥发送到客户端。
服务器向客户端发送数据的时候用公钥进行加密,客户端收到数据后用私钥解密。
客户端向服务器发送数据的时候用私钥进行加密,服务器收到数据后用公钥解密。

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

id_rsa :私钥,别台机器想登录你,你就把私钥发给它
id_rsa.pub :为公钥,你想登录别台机器,你就把公钥发给他,并叫他安装到authorized_keys
authorized_keys: 里面记录了服务器授权的所有公钥
known_hosts:ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。

当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

二、配置SSH密钥登录

用户在本地个人电脑生成一个密钥对,然后将公钥上传并安装到服务器上。

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

#编辑 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config

PasswordAuthentication no    # 关闭密码登录
RSAAuthentication yes          #使用RSA加密算法
PubkeyAuthentication yes     #打开密钥输入模式
PermitRootLogin yes              #允许root远程登陆
AuthorizedKeysFile .ssh/authorized_keys   #允许的公钥存放的文件

保存退出

重启服务
systemctl restart sshd

2.2 生成密钥对

密钥对的生成在本地电脑或者服务器都可以。

如果,你想不同服务器共用一个密钥对,那建议在本地电脑生成,之后将公钥上传到服务器并安装就行。
如果,你想不同服务器使用不同的密钥对,那无所谓。
这边以服务器端生成密钥对举例,客户端也一样,比如windows打开cmd输入命令就行。
首先登录到服务器后,在命令行输入命令,然后一路回车就行。

##生成秘钥
ssh-keygen

ssh-keygen 参数:

-t 指定密钥类型,默认是 rsa ,可以省略。
-f 指定密钥文件存储文件名。
-C 设置注释文字,比如邮箱。

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

2.3 在服务器上安装公钥

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

如果没有id_rsa.pub,那就上传到该目录。
然后在命令行输入以下命令安装公钥,其实就是将id_rsa.pub的内容添加到authorized_keys。

cd ~/.ssh 
touch authorized_keys
cat id_rsa.pub >> authorized_keys

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

chmod 600 authorized_keys  
chmod 700 ~/.ssh

2.4 客户端利用私钥登录

如果是在服务器端生成的密钥对,首先要将.ssh文件夹中的私钥id_rsa下载到客户端,比如你的电脑,放在一个你不会删除的文件夹内,比如新建了一个 ssh 文件夹保存秘钥,为了便于管理 你也可以修改秘钥的文件名。

三、多私钥管理

通过指定不同的文件名来生成不同的私钥文件,首先生成第一个密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa_main -C "Key for server_main"

生成第二个密钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa_second -C "Key for server_second"

我们把生成的对应公钥放到对应的服务器上

新增ssh的配置文件,并修改权限

touch ~/.ssh/config
chmod 600 ~/.ssh/config

vi ~/.ssh/config
修改 config文件如下:

Host www.jiucool.org
    IdentityFile ~/.ssh/id_rsa_main
    User jiucool

Host www.google.com
    IdentityFile ~/.ssh/id_rsa_second 
    User jiucool

注:以下转自https://www.cnblogs.com/yangzhou33/p/11450525.html,感谢大佬

Host github
	HostName github.com
	IdentityFile ~/.ssh/id_rsa.github
	User git
 // 设置别名为 github
 // 域名为 github.com
 // 使用 ssh 文件为 ~/.ssh/id_rsa.github
 // 用户为 git

在用如上方法设置之后,能够正常登陆,但是关机后再开机,又不能正常登陆了,这个时候需要把 rsa 添加到 ssh 高速缓存里面去,命令如下:

ssh-add -K ~/.ssh/id_rsa
那我们肯定不能每次开机都要输入上面的命令吧,我们需要开机自动运行上面的命令:

// 创建 .bash_profile
touch ~/.bash_profile
// 在 .bash_profile 中写入命令
echo ‘ssh-add -K ~/.ssh/id_rsa’ >> ~/.bash_profile
然后在开机的时候就会自动运行 ~/.bash_profile 里面的命令了。

但是如果我们使用了别的 bash 比如 zsh,上述的方法可能会不管用,这个时候我们需要打开 zsh 的配置文件,用配置文件来启动 ~/.bash_profile 这个文件:

// 打开 zsh 的配置文件
open ~/.zshrc
// 写入下面的代码
source ~/.bash_profile
或者直接用下面的命令写入:

echo ‘source ~/.bash_profile’ >> ~/.zshrc
注意:echo 命令后面如果使用单引号则表示写入代码片段,会自动换行;如果使用双引号则表示写入单一字段,不会自动换行!

  • 25
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

深度学习0407

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

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

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

打赏作者

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

抵扣说明:

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

余额充值