SSH配置公钥登录

  

  

SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

在虚拟机创建linux或者在主机商购买云服务器都会需要用SSH进行远程登录。第一步往往都是先配置SSH的相关设置。

本篇主要介绍了如何禁用root和密码登录和使用公钥私钥登录,并记录一次我配置SSH的过程

密码口令登录

  通过密码进行登录,主要流程为:

  1. 客户端连接上服务器之后,服务器把自己的公钥传给客户端
  2. 客户端输入服务器密码通过公钥加密之后传给服务器
  3. 服务器根据自己的私钥解密登录密码,如果正确那么就让客户端登录

公钥登录

  公钥登录是为了解决每次登录服务器都要输入密码的问题,流行使用RSA加密方案,主要流程包含:

  1. 客户端生成RSA公钥和私钥
  2. 客户端将自己的公钥存放到服务器
  3. 客户端请求连接服务器,服务器将一个随机字符串发送给客户端
  4. 客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
  5. 服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝。

如果允许ROOT登录,很多IP段都会被弱口令扫描,尝试用ROOT的方式登录。由此可见关闭ROOT登录是必要的操作。

服务器默认ROOT登录,由于ROOT登录不安全性,需要关闭root登录。

登录到服务器

我使用的是openssh for windows

当然有其他的很多的ssh Client,openssh直接可以用CMD打开

别的客户端还有Putty Xshell等。

OpenSSH连接到服务器

使用指令ssh username@hostname

没有绑定域名的话主机商提供有IP地址可在控制面板查看,同时还有root账号和密码。首次登录一般都是root账户

ssh root@xxx.xxx.xxx.xxx

xxx换为主机商提供的IP地址

使用putty连接到服务器

Android 公钥 获取 公钥登陆_服务器

在此处输入主机商提供的ip地址即可连接,稍后会提示输入username和password

创建新账户,使用新账户登录并关闭ROOT登录

首先新创建用户账户

useradd jhsy 创建用户

passwd jhsy 创建密码

分配sudo权限

添加用户到/etc/sudoers

此时需要用到VIM的相关操作
只需要知道HJKL四个键控制光标的上下左右
在需要输入的时候使用I键进入输入模式,输入完成后按ESC键退出输入模式
使用:符号进入命令模式
:w 保存
:q 退出
:q! 强制退出
:wq! 强制保存退出
有些系统默认没有vim需要安装vim或者使用vi替代vim
我比较习惯用vim,如没有vim 可自行安装vim

vim /etc/sudoers
——————————————————
#Allow root to run any commands anywhere
root  ALL=(ALL)       ALL
jhsy  ALL=(ALL)       ALL

添加新创建的账户到#Allow root to run any commands anywhere下方

如果出现//readonly option is set (add ! to override)错误,是因为

Android 公钥 获取 公钥登陆_客户端_02

sudoer没有w权限

sudoers文件只有可读的权限,直接用:wq!强制保存。

测试sudo是否添加成功

su jhsy                        //切换到jhsy
sudo echo helloworld           //sudo 输出 helloworld

Android 公钥 获取 公钥登陆_客户端_03

sudoer添加成功,可以使用sudo

关闭ROOT登录SSH

编辑SSH配置文件,并将PermitRootLogin yes改为no

vim /etc/ssh/sshd_config
——————————————————
PermitRootLogin yes改为no

Android 公钥 获取 公钥登陆_客户端_04

PermitRootLogin yes改为no

重启ssh服务

使用指令systemctl restart sshd.service重启ssh服务

systemctl restart sshd.service

测试root ssh登录

Android 公钥 获取 公钥登陆_客户端_05

登录失败

可以看到Root已经无法登录服务器了。

创建并使用公钥登录

创建公钥和私钥

使用ssh-keygen生成公钥和私钥

ssh-keygen -t "加密方式" -C“描述”

例如

ssh-keygen -t rsa -C "jhsy"

-C参数可不加,直接用ssh-keygen -t rsa 即可。当然也可以选择其他的加密方式

这里我使用ssh-keygen -t rsa

Android 公钥 获取 公钥登陆_客户端_06

默认创建位置都在个人目录下的.ssh/

Passphrases是私钥的密码,可以选择输入密码也可以留空,每次私钥登录都会要求输入密码。

当生成下面的小图片,也就是指纹之后就说明生成成功了。此时~/.ssh/目录下会生成两个文件,id_rsa和id_rsa.pub

安装公钥

ssh登录时会先检查公钥,公钥位置在~/.ssh/authorized_keys

此时我们发现.ssh下并没有authorized_keys

需要将公钥放入authorized_keys

使用cat或者mv都可以,这里我使用cat命令

cat idrsa.pub >> authorized_keys

更改权限

authorized_keys需要600

.ssh需要700

使用chmod命令

chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

下载私钥到本地

将~/.ssh/id_rsa下载到本地

使用scp下载

在本地电脑上使用scp user@hostname:~/.ssh/id_rsa 本地目录

列如

scp user@hostname:~/.ssh/id_rsa ./Desktop/id_rsa

将私钥放在桌面

打开公钥登录

编辑/etc/ssh/sshd_config

vim /etc/ssh/sshd_config

Android 公钥 获取 公钥登陆_Android 公钥 获取_07

PubkeyAuthentication no改为yes

暂时不要关闭密码登录,如果没有

:wq!保存

重启ssh服务

systemctl restart sshd.service

测试公钥登录

openssh登录

ssh -i 私钥位置 user@hostname

如果有私钥密码的话会提示输入私钥密码,没有密码则直接登录成功

Android 公钥 获取 公钥登陆_Android 公钥 获取_08

我的id_rsa文件更改了名字,改为了auth,我设置了私钥密码,所以在登录时会要求输入密码。

putty登录

putty使用私钥登录需要转换为ppk

使用Putty key Generator工具转换

Android 公钥 获取 公钥登陆_vim_09

Android 公钥 获取 公钥登陆_服务器_10

转换完毕之后点击Save private key保存私钥到本地

Android 公钥 获取 公钥登陆_服务器_11

在此处将转换完成的ppk私钥放入putty并登录

关闭密码登录

更改/etc/ssh/sshd_config

sudo vim /etc/ssh/sshd_config

找到PasswordAuthentication 将yes改为no

Android 公钥 获取 公钥登陆_服务器_12

:wq!保存配置

再次使用密码登录的时候服务器已经拒绝了。这样安全性就会大大提升。