一.SSH介绍和功能实现的具体软件
二.openssh介绍
1.OpenSSH介绍
2.ssh客户端
3.ssh功能
4.ssh服务登录验证
三、秘钥试验
1.秘钥登录实验
2.如何通过脚本批量部署秘钥登录
3.批量修改selinux
4.多台服务器互相登录
一.SSH介绍和功能实现的具体软件
ssh:secure shell,protocol,22/tcp,安全远程登录
具体软件实现:
OpenSSH:ssh协议的开源实现,CentOS默认安装
dropbear:另一个开源实现
SSH协议版本
v1:基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式
基于DH算法做秘钥交换,基于RSA或DSA实现身份认证
两种方式的用户登录认证:
基于password
基于key
二.openssh介绍
1.OpenSSH介绍
相关包:
openssh
openssh-clients
openssh-server
工具:
基于C/S结构
Client: ssh, scp, sftp,slogin
Windows客户端:
xshell, putty, securecrt, sshsecureshellclient
Server: sshd
2.ssh客户端
客户端组件:
ssh, 配置文件:/etc/ssh/ssh_config
/etc/ssh/ssh_config 服务器端配置文件
Host PATTERN
StrictHostKeyChecking no 首次登录不显示检查提示(自动化运维可以修改这一项不提示)
格式:ssh [user@]host [COMMAND] ssh [-l user] host [COMMAND]
常见选项
-p port:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X:支持x11转发
-t:强制伪tty分配
ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserve [command
]
可以-=用来执行一次性命令
3.ssh功能
允许实现对远程系统经验证地加密安全访问
当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub
(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的
~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒
绝连接
4.ssh服务登录验证
ssh服务登录验证方式:
用户/口令
基于密钥
基于用户和口令登录验证
1 客户端发起ssh请求,服务器会把自己的公钥发送给用户
2 用户会根据服务器发来的公钥对密码进行加密
3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,用户登录
基于密钥的登录方式
1 首先在客户端生成一对密钥(ssh-keygen)
2 并将客户端的公钥ssh-copy-id 拷贝到服务端
3当客户端再次发送一个连接请求,包括ip、用户名
4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP
和用户,就会随机生成一个字符串,例如:xiaopeng
5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的
字符串发送给服务端
7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,
就允许免密码登录
基于密钥的认证:
(1) 在客户端生成密钥对
ssh-keygen -t rsa [-P ‘’] [-f “~/.ssh/id_rsa"]
(2) 把公钥文件传输至远程服务器对应用户的家目录
ssh-copy-id [-i [identity_file]] [user@]host
(3) 测试
(4) 在SecureCRT或Xshell实现基于key验证
在SecureCRT工具—>创建公钥—>生成Identity.pub文件
转化为openssh兼容格式(适合SecureCRT,Xshell不需要转化格式),并复制到
需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh
主机上执行:ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
(5)重设私钥口令:
ssh-keygen –p
(6)验证代理(authentication agent)保密解密后的密钥
• 这样口令就只需要输入一次
• 在GNOME中,代理被自动提供给root用户
• 否则运行ssh-agent bash
(7)钥匙通过命令添加给代理
ssh-add
三、秘钥试验
1.秘钥登录实验
1.生成秘钥文件
ssh-keygen 采用默认值即可,密码可以选填
2.发送秘钥
ssh-copy-id -i
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.20.39.40
服务端会自动在 /root/.ssh生成一个文件authorized_keys
可以把这个秘钥发给想要管理的服务器,拷贝路径可以不用写默认找到rsa.pub文件
2.如何通过脚本批量部署秘钥登录
vim ./ssh_key_push.sh
#!/bin/bash
ssh-keygen -P"" -f /root/.ssh/id_rsa
pass=root
rpm -q expect &> /dev/null || yum install expect -y -q
while read ip ;do
expect <
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub KaTeX parse error: Expected '}', got '\n' at position 33: …no" { send "yes\̲n̲";exp_continue …pass\n" }
}
expect eof
EOFexpect <
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub KaTeX parse error: Expected '}', got '\n' at position 33: …no" { send "yes\̲n̲";exp_continue …pass\n" }
}
expect eof
EOF
done < hosts.txt
3.批量修改selinux
#!/bin/bash
for ip in cat hosts.txt
;do
ssh $ip sed -i ‘s/SELINUX=disabled/SELINUX=enforcing/’ /etc/selinux/config
done
编写需要修改的hosts文件把ip地址写到里面通过这个脚本批量修改selinux,前提是已经实现了key验证。
为了安全可以对私钥进行加密 ssh-keygen -p 重新添加一个秘钥口令,下次使用秘钥登录需要输入口令
注:如果不想输入口令可以把口令托管给代理
1.启用ssh代理
ssh-agent bash
启用过后第一次链接需要输入秘钥口令
ssh-add
输入口令后就托管成功以后再链接就不需要输入口令了
下次登录需要再次托管给代理
4.多台服务器互相登录
在客户端生成秘钥然后把秘钥自己拷贝给自己然后把生成的文件发送给其他服务器
这样就可以实现多台机器互相登录
1.ssh-keygen 生成秘钥
2.ssh-copy-id -i /root/.ssh/id_rsa.pub 本机IP地址
3 ssh -pr /root/.ssh 目标地址:/root
4 其他的机器重复这个操作即可