一、SSH执行原理:

1、客户端发出远程登录请求 用户名@服务端主机名或者IP 2、服务端查看是否有 该用户名 的公钥 3、如果有,服务端生成随机字符串,并用公钥加密(就是随机字符串与公钥作某种运算),发送给客户端 4、客户端利用本地的私钥对字符串解密(逆运算)。 5、客户端将解密后的字符串结果发送给服务端 6、服务端利用解密的字符串与原始字符串匹配,如果相等,验证通过,并授权给客户端。

二、环境配置

服务器环境 centos7.2/centos6.9

本地环境 window10

终端: SecureCRTPortable

三、生成证书

在用户目录下键入命令(/home/root)

# ssh-keygen -t rsa

输入命令后按照提示安装,以下是说明:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。

现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

四、在服务器上安装公钥

键入以下命令,在服务器上安装公钥:

# cd .ssh

# cat id_rsa.pub >> authorized_keys

注意:之所以要弄个authorized_keys的。是因为配置/etc/ssh/sshd_config下默认是这个名字

如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:

# chmod 600 authorized_keys

# chmod 700 ~/.ssh

五、设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件

# vi  /etc/ssh/sshd_config

进行如下设置:

RSAAuthentication yes
PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

#禁用root 登录,创建一个普通用户用作远程登录,然后通过su -转为root 用户
PermitRootLogin yes

#改到一般扫描器扫到累死才能找到的端口(从20 扫到 36301 … 哈哈)
Port 36301

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no
//注意风险,设置了再也不能用密码登录了。如果密钥什么丢了就麻烦了

最后,重启 SSH 服务:

centos6.9重启命令

# service sshd restart

centos7.2重启命令

/bin/systemctl restart  sshd.service

六、将私钥下载到客户端

设置好SecureCRTPortable的下载目录。这里使用sz下载 (如何下载上传参考Centos与本地终端 上传、下载 文件

sz id_rsa

下载到本地后。使用SecureCRTPortable登录

快速链接

鉴权哪里点击公钥->属性->使用全局公钥设置->使用身份或者证书文件->选择刚刚下载下来的文件->确定->确定

填好 主机名 端口 用户名 勾选公钥、键盘交互、GSSAPI选项

链接

七、封IP
vi /etc/hosts.deny

填写

sshd : ALL EXCEPT xxx.xxx.xxx.0/255.255.255.0 zzz.zzz.zzz.zz yyy.yyy.yyy.0/255.255.255.0

上面的意思是拒绝所有的IP ssh 登录除了我列出的IP 外。我上网是用的ADSL,通常在两个IP池中取得,所以上面的xxx.xxx.xxx.0 和 yyy.yyy.yyy.0 是我的动态ADSL ip 段。另外一个 zzz.zzz.zzz.zz 是我在单位的固定的IP,这个以防万一,万一我的ADSL网段变了,岂不是服务器也拒绝我的登录了?所以做IP拒绝时要慎重小心,不要把自己也锁在门外, 哈哈。