SSH远程登录的密钥验证授权机制
当我们通过SSH远程另外一台服务器时可以通过输入密码,或者是不直接输入密码就可以登录登录目标服务器中
远程登录一般有两种方式:
密码登录:客户端发出授权请求时,服务端要求输入密码进行验证授权
密钥登录:客户端发出授权请求时,服务端根据事先配置的密钥验证身份并授权
配置步骤:
1、客户端生成密钥对,包括公钥、私钥
2、私钥配置在本地,将公钥发送给服务端
3、服务端将客户端的公钥加入到授权列表
SSH执行原理:
1、客户端发出远程登录请求 用户名@服务端主机名或者IP
2、服务端查看是否有 该用户名 的公钥
3、如果有,服务端生成随机字符串,并用公钥加密(就是随机字符串与公钥作某种运算),发送给客户端
4、客户端利用本地的私钥对字符串解密(逆运算)。
5、客户端将解密后的字符串结果发送给服务端
6、服务端利用解密的字符串与原始字符串匹配,如果相等,验证通过,并授权给客户端。
linux的SSH配置步骤:
以192.168.5.14
作为客户机
以192.168.5.13
作为服务器
1、在客户机生成密钥对
// 文件目录不指定,默认也是当前用户的.ssh目录下
在本地服务器上执行如下命令,用来生成秘钥
$ ssh-keygen -t rsa 之后全回车即可
[root@tslave .ssh]# ssh-keygen -t rsa 之后全回车即可
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): //回车即可
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:
SHA256:YWEga+0P54vUw/vT3c34Qb6lj59Kuw2ZrJxDenhpT7As root@tzgslave58
The key's randomart image is:
+---[RSA 2048]----+
| . ..o |
| + . . |
| o . o . |
| . . . ... o . |
| o S. o+ + |
| B 1o.= |
| . * E==++ |
| . . +.=2=+. |
| . o.o*+X+ |
+----[SHA256]-----+
[root@tslave .ssh]# ll //可以看到生成id_rsa(私钥) 和 id_rsa.pub(公钥)
total 12
-rw------- 1 root root 1766 Jul 31 14:43 id_rsa
-rw-r--r-- 1 root root 397 Jul 31 14:43 id_rsa.pub
-rw-r--r--. 1 root root 349 Jul 3 11:49 known_hosts
2、拷贝公钥到服务端
// scp的意思就是 ssh copy
// 需要密码
//如果IP前不加用户,默认为root用户,如果是用其它用户可以为user@IP
$ scp ~/.ssh/id_rsa.pub 192.168.5.13:~/.ssh/id_rsa.pub_192.168.5.14
3、服务端,把公钥添加到授权列表
在SSH服务器中导入公钥文本
在服务器中,目标用户(用来远程登录的用户)的公钥数据库位于~/.ssh/
目录下,默认文件名是authorized_keys
。
注意修改authorized_keys权限
# 如果authorized_keys不存在,则创建它
touch ~/.ssh/authorized_keys
# 将上传的公钥添加到authorized_keys后面
cat ~/.ssh/id_rsa.pub_192.168.5.14 >> ~/.ssh/authorized_keys
# 修改authorized_keys权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# 查看authorized_keys最后一行
tail -1 ~/.ssh/authorized_keys
注意:authorized_keys文件必须只能是该用户可读可写,其他用户组都是无权的状态才能生效。
// 追加公钥信息到上述文件中
$ cat ~/id_rsa.pub >>authorized_keys
5、从客户端远程登录,如果不要密码,说明配置成功
// 登陆自己就可以测试
$ ssh 192.168.5.13
[root@tslave .ssh]# ssh 192.168.5.13
Last login: Tue Jul 31 15:05:08 2018 from 192.168.5.14
6 远程执行命令
6.1 简单命令
双引号,必须有。如果不加双引号,第二个命令在本地执行
分号,两个命令之间用分号隔开
ssh tslave@192.168.5.13 "cd ~ ; touch ssh.txt"
6.2 使用脚本执行多命令
#!/bin/bash
ssh tslave@192.168.5.13 > /dev/null 2>&1 << sshoff
cd ~
touch autossh.txt
exit
sshoff
echo "done!"
远程执行的内容在<< sshoff
至sshoff
之间,在远程机器上的操作就位于其中
注意的点:sshoff
可以随便修改成其他形式
重定向目的在于不显示远程的输出了
在结束前,加exit退出远程节点
通过上述配置后,就可以不需要密码则可以直接登录目标服务器进行相关操作