openSSH工作模型
1、当客户机请求连接服务机时,在建立TCP三次握手后,服务机将自己的主机密钥的公钥发送给客户机,如果客户机能将该与本地保存的服务机主机密钥匹配,则信任该服务机;如果不能匹配,则会询问用户是否信任。
2、紧接着是服务器与客户端协商以后进行通信所使用的会话密钥和加密算法。协商方式有很多,这里举一例子。
服务器与客户端分别获得对方的公钥,服务器将相关原数据使用自己的私钥加密,再对加密后的数据使用客户端公钥加密一次,发送给客户端。此时仅有客户端自己的私钥能解密,并且解密之后的数据再次使用服务器的公钥解密得到原数据,此时不仅双方身份得到验证,也成功进行密钥与算法协商。
3、随后服务器发送登录提示符给客户端,客户端则会通过以下两种方式其中一种来登录到服务机:
口令认证: 通过使用用户名与密码来登录远端主机。
密钥认证: 由客户机生成一对密钥,并将公钥存放于服务机对应用户家目录~/.ssh/authorized_keys文件中。当以后再次登录时,服务器使用事先存放的公钥加密一段数据发送给客户端,如果客户端能够解密,获取加密数据,服务器则允许客户端登录。
openSSH相关配置文件
客户端:/etc/ssh/ssh_config,使用man ssh_config来查看配置文件使用帮助
服务端:/etc/ssh/sshd_config,使用man sshd_config来查看配置文件使用帮助
Linux客户机通过密钥登陆方法的方法:
# cd ~/.ssh/
# ssh-keygen -t rsa -P '' -f "./id_rsa" #本地创建密钥对
选项说明:
-P:指定文件密码为空
-t:加密类型
-f "/path":指定生成文件路径
注:会自动生成id_rsa私钥文件以及id_rsa.pub公钥文件
# ssh-copy-id -i ~/.ssh/id_rsa.pub userName@host #上传公钥至服务器~/.ssh/authorized.keys文件中
注:authorized_keys文件权限必须为600
Windows平台Xshell工具通过密钥登录方法:
1、点击“工具”,在下拉菜单栏点击 “新建用户密钥生成向导”
2、选择算法及密钥长度,下一步
3、密钥生成完成,点击下一步
4、输入私钥名称和加密私钥的密码,留空则无密码。下一步
5、方框中内容是公钥,将他复制下来。点击完成即可
6、使用密码登录服务机,在对应用户家目录下.ssh/authorized_keys文件中追加刚才复制的公钥信息。
//注:如果authorized_keys文件事先不存在,则手动创建
# touch authorized_keys
# chmod 600 authorized_keys #必须步骤
//然后,你就可以在登陆时选择对应公钥(public key)方式登录了。
openSSH基本使用法则:
1、不使用默认端口;
2、禁止使用protocol version 1;
3、限制可登录用户;
4、设定空闲会话超时时长;
5、利用防火墙设置ssh访问策略;
6、仅监听特定的IP地址;
7、基于口令认证时,使用强密码策略;
8、使用基于密钥的认证;
9、密钥登录禁止使用空密码;
10、禁止root用户直接登录;
11、限制ssh的访问频度和并发在线数;
12、日志分析;
注: 加速ssh连接速度:修改/etc/ssh/sshd_conf下列参数
GSSAPIAuthentication no
UseDNS no
openSSH的常用命令:
ssh [option] USER@HOST
选项说明:
-l:指定登录用户名,ssh -l userName hostName
-p:指定远端SSH服务监听端口
-X:支持x11转发,即在本地显示远端主机图形界面
scp [option] SOURCE_FILE DEST_FILE //基于SSH协议的跨主机复制命令
两种用法:
scp /PATH_TO_COPY USER@HOST:/PATH_TO_SAVE #将本地文件复制到远端
scp USER@HOST:/PATH_TO_COPY /PATH_TO_SAVE #将远端文件复制到本地
选项说明:
-p:保留源文件属性
-r:递归复制
-P:指明端口