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 命令后面如果使用单引号则表示写入代码片段,会自动换行;如果使用双引号则表示写入单一字段,不会自动换行!