SSH-key连接原理
1,我们想通过远程的方式从我的电脑远程连接到对方的电脑上那么在LINUX系统下我们可以通过一种叫ssh的方式连接过去。SSH客户端(ssh命令)还包含一个很有用的远程安全拷贝命令scp。
2,有两种连接方式,
(1)telnet 这种是明文的容易让黑客捕获。
应用方式:安装telnet(远程登录的意思)
Yum –y install telnet
安装好后怎么链接呢?
如 telnet 192.168.112.356 22 IP是对方IP地址
22端口号、
当然对方也要安装telnet
(2)ssh 是经过加密的。
3,ssh有两种级别的连接方式
第一种级别(基于口令的安全验证)
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。第二种级别(基于密匙的安全验证)
需要依靠秘钥,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
总结1,
ssh连接第一级别:
ssh连接默认端口是22
(1)
有两台电脑 A和B. A要登录 B电脑的超级用户
#ssh 192.168.29.144 登录超级用户IP前不用加@
第一次连接 会问你 记录不记录对方IP地址, 必须记录 YES
之后对方密码弹出 输入对方的密码回车
用hostname –I 查看下本机IP地址,这样就是对方的IP地址对方的主机了。
然后exit退出,就等退出了
(2)
有两台电脑 A和B. A要登录 B电脑的普通用户 (不是超级用户)
添加个用户
如我现在在另一台电脑添加用户
Useradd yunjisuan 创建一个叫yunjisuan 的用户 路径时/home 目录
Echo “123123” | passwd - -stdin yunjisuan 给yunjisun 用户添加密码。
我现在在第一台电脑我用ssh连接另一台电脑的 yunjisuan用户
A电脑 输入: ssh yunjisuan@192.168.,29.144 (ip地址前不加东西就是超级用户)
之后输入密码:123123 就登录进去了
(3)
远程复制在电脑双方都要安装 scp命令
yum insiall openssh-clients (打开ssh客户端) 安装scp远程复制命令
之后怎么做呢?
1,我在A电脑
映射一句话 到/etc/hosts里
# echo "'hostname –I' www.yunjisuan.com" >> /etc/hosts
Cat /etc/housts 看一下。 没问题
再用scp复制,把A的housts目录复制到B电脑 超级用户 /root/etc下
#scp /etc/hosts 192.168.29.144:/etc/回车 复制hosts这个目录过去。
注意:没加root@192.168.29.1144 就是默认超级用户登录。
上B电脑查看 cat /etc/hosts 就有了
2,以上我是把我A电脑的数据复制过。
去接下来。
我要把B电脑的数据拉过来怎么操作呢?
用#:scp root@192.168.29.144:~/222 .
这是把B电脑的 根下YYY文件复制到我A电脑的 点 当前目录下。
总结2
ss h连接第二级别
秘钥的意义就在于不用输密码,就进入对方的服务端。
1,首先 创建秘钥对
ssh Tab一下 会发现很多命令
Ssh-Keygen 生成秘钥对的命令 (交互生成秘钥)
Ssh-copy-id分发秘钥对的命令
(1)# Ssh-Keygen 回车
会出来这三样,第一个…..(/root/.ssh/id_rsa) 这是这个命令 在根下root下 .ssh 点就是隐藏文件。后边的id_rsa就是秘钥对的名字 (在这个目录下生成一个叫id_rsa的文件)
第二个是密码 直接回车不设就行
第三个也是密码,直接回车
就创建完了。
(2)#ls .ssh 看一下 有三个文件 分别是
id_rsa 私钥 id_rsa.pub 公钥 known_hosts远程登录记录
客户端拿私钥 服务端拿公钥 (就是谁登录谁 就把公钥发给谁)
私钥可以有很多份,但公钥只能有一份,私钥去找公钥。
(3)我现在在客户端创建了秘钥对
现在得把公钥给服务端复制过去
怎么操作呢?
首先(1)在服务端家目录下创建一个 mkdir .ssh 目录
(2)ll -d .ssh/ 看看他是什么权限? 为什么看呢?因为你的秘钥权限过大,Linux系统担心安全是不会让你成功的。
所以你得给它设置下权限(客户端服务端双方都要设置700权限)
#:chmod 700 .ssh/ 它权限必须是700
(3)在服务端把公钥改名vi /etc/ssh/sshd_config
进入编辑器在47行 复制authorized_keys 这个名字
mv id_rsa.pub authorized_keys 改成这个名字
set nu 显示行号
或者cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 这样改名
(5)现在来客户端把公钥 复制过去给服务端(或者相反)
#:scp .ssh/authorized_keys 192.168.29.144:~/.ssh/
(6)还有些提高效率的操作。
vim /etc/ssh/sshd_config 后
79行改成no (centOS6是81行 改成on) 这是验证改成on 不验了
115行改成no (centOS6是122行 改成on) NDS 改成no
之后重启一下systemctl restart network
然后scp /etc/ssh/sshd_config root@192.168.29.144:/etc/ssh/
这个sshd_config这个修改后的配置文件给对方发过去。覆盖对方的配置文件(省得对方改了) 这是ssh的配置文件。
对方也重启一下systemctl sshd reload
(7)ssh 192.168.29.144 这就无密码的连接上了
结束 这就是秘钥连接 免秘钥的过程。
但是你连普通用户照样还有密码,除非普通用户也有公钥照以上这么改。
示范一下连接普通用户
前提:要在对方电脑上创建个普通用户
(1)Useradd yunjisuan 创建一个叫yunjisuan 的用户 路径在/home 里
Echo “123123” | passwd –stdin yunjisuan 给yunjisun 用户添加密码。
(2)然后进去对方电脑普通用户下(yunjisuan下)创建
#:mkdir .ssh 目录
在改.ssh的属主为yunjisuan #:chown yujisuan .ssh
权限为700 #:chown 700 .ssh
#:ll –d .ssh 查看下
(3) 因为普通用户里没有.ssh目录。所有要把我方的公钥给复制过去到yunjisuan用户的超级用户也就是~家目录里
#scp ~/.ssh/authorized_keys yunjisuan@192.168.29.144:~
(4)然后进去对方电脑cd /home/yunjisuan 就有authorized_keys文件了。
在把authorized_keys移到 .ssh里
mv authorized_keys .ssh
(5)但是这时我进的是普通用户,普通用户要能用这文件就要把authorized_keys的属主改成普通用户:
#:chown yujisuan authorized_keys
(6)连接ssh yunjisuan@192.168.29.144 就连接上了
总结3
ssh 秘钥连接的简化方式
在客户端.ssh下 还有个ssh-copy-id 它是用来分发公钥的刚才服务端做的那些操作它都能自动来完成。
(1)
一条命令生成秘钥对。 而不用之前的ssh-Keygen 生成秘钥对的命令 (交互生成手动分发)
-d dsa 指定加密算法 dsa
-f 指生成的秘钥放在哪里
-P 杠大P “”里边没东西就是空密码
#ssh-keygen –t dsa –f ~/.ssh/id_dsa –P “” 回车
(2)一条命令分发
我现在要分发
-i 你要分发什么?(要分发这个~/.ssh/id_dsa.pub公钥)
ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144
现在进入服务端 家目录下/home
Ls –a 看一下 yunjisuan
最后一行多了一个700权限属主属组都是yungjisuan(直接就把权限改了)
回车后再看下.ssh里边公钥在不在。
之后用客户端直接连接服务端。可以了
(3) 但是以上步骤分发秘钥时还需要输入密码。 怎么把这个密码也删掉呢?
有个命令叫sshpass 需要云yum安装本地yum没有
sshpass –p “123123” 输入密码之后再分发。
#sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub yunjisuan@192.168.29.144
之后登陆OK了
(4)cd .ssh回车
Ls里有个这个目录 known_hosts
这是记录来访的IP 如果要清空了,再去登陆对方还要输入密码
清理方法是[.ssh] # > know_hosts
怎么做我在清空known_hosts后,在连接对方,还能免密的连接上呢?
需要再加几个参数:
–o StrictHostKeyChecking=no
#sshpass –p “123123” ssh-copy-id –i ~/.ssh/id_dsa.pub “–o StrictHostKeyChecking=no yunjisuan@192.168.29.144” 回车
(5)在连接就可以了 结束