目录
一、openssh是什么
二、安装openssh
三、ssh协议
四、客户端登录过程
(1)远程登录——采用“密码身份验证方式”
(1)远程登录——采用“密钥身份验证(免密登录)方式”
五、openssh配置文件
(1)客户端
(2)服务端的~/.ssh/config文件
(3)服务端的/etc/ssh/sshd_config
1.设置ssh通信监听端口(默认是22)
2.设置监听ip
3.设置不允许远程登录root账号
4.禁止使用密码身份验证方式登录
5.更多常用配置参数
6.设置注意事项
一、openssh是什么
一个软件,用来让windows或者linux客户端,能够远程登陆linux服务器
官网 www.openssh.com
openssh=【securet shell】+【ssh协议】
openssh分为客户端、服务端。服务器安装服务端,安装启动后会有一个sshd的服务,负责接收处理其他远程主机上的openssh客户端发来命令
查看openssh版本命令:ssh -V
二、安装openssh
客户端:xshell、securetcrt等远程工具,自带ssh客户端
服务端:
sudo apt-get update
sudo apt-get install openssh-server
ps -ef |grep ssh //有sshd,说明安装成功
三、ssh协议
ssh协议对通信内容加密,安全;
telnet协议是明文通信不加密,不安全
四、客户端登录过程
客户端输入登录命令:ssh 用户名@服务器ip或服务器主机名
然后客户端就向服务端发送了一个远程登录的请求
(1)远程登录——采用“密码身份验证方式”
第一次登录
- 客户端发送远程登录请求
- 服务端根据请求的用户名密码信息,生成密钥对(公钥、私钥),发送公钥给客户端
公钥用于加密数据,私钥用于解密数据;
---------公钥位置:/etc/ssh/ssh_xxxx_key.pub
---------私钥位置:/etc/ssh/ssh_xxxx_key
- 客户端收到是否保留公钥的提示,点击保存
linux客户端保存位置:~/.ssh/known_hosts
--------文件内容如下图:
- 服务端进行安全认证 //即服务器校验客户端手里的公钥,和私钥匹配就认证通过
- 认证通过,建立连接,登录成功
第二次登录
- 客户端发送远程登录请求
- 服务端检测到客户端已经有公钥了
- 服务端进行安全认证
- 认证通过,建立连接,登录成功
第三次登录,出现报错
- 服务端删除了密钥对(ssh_xxxxxx含登录用户标识_key、ssh_xxxxxx含登录用户标识_key.pub)
- 客户端发送远程登录请求
- 服务端检测到客户端已经有公钥了
- 服务端进行安全认证——>服务端上没有对应的私钥
- 认证失败,客户端报错
第四次登录,出现拒绝连接
- 服务端删除了密钥对(ssh_xxxxxx含登录用户标识_key、ssh_xxxxxx含登录用户标识_key.pub)
- 服务端重启ssh服务(执行systemctl restart sshd),重新生成了密钥对
- 客户端发送远程登录请求
- 服务端检测到客户端已经有公钥(服务端删除之前的)了
- 服务端进行安全认证——>客户端公钥、服务端私钥不匹配
- 认证失败,客户端提示服务器拒绝连接的
解决办法:客户端清空公钥信息 //执行:>~/.ssh/known_hosts
(1)远程登录——采用“密钥身份验证(免密登录)方式”
第一次登录
- 客户端手动生成密钥对
linux客户端-手动生成密钥对-命令:ssh-keygen
ssh-keygen -t //-t,自定义加密方式,默认是rsa
ssh-keygen --help //查看支持哪些加密方式
ssh-keygen -f //设置保存位置,默认放到~/.ssh/
- 手动发送公钥给服务端
客户端-手动发送公钥-命令:ssh-copy-id 用户名@服务器ip或服务器主机名
---------公钥位置:服务端的~/.ssh/authorized_keys
- 客户端发送远程登录请求
- 客户端进行安全认证 //即客户端校验服务端手里的公钥,和私钥匹配就认证通过
- 认证通过,建立连接,登录成功
五、openssh配置文件
(1)客户端
/etc/ssh/ssh_config 主配置文件
/etc/ssh/ssh_config.d 子配置文件
(2)服务端的~/.ssh/config文件
设置“服务端进行安全认证时,检查客户端公钥的行为”
适用于内网等安全通信环境(不安全):
StrictHostKeyChecking=no //客户端没有公钥或不匹配,服务端就把现在的公钥发送给客户端,让其保存到~/.ssh/known_hosts里
外网环境下的设置(安全):
StrictHostKeyChecking=ask(默认) //客户端没有公钥或不匹配,会询问
StrictHostKeyChecking=yes //客户端公钥不匹配,不提示,直接拒绝
(3)服务端的/etc/ssh/sshd_config
1.设置ssh通信监听端口(默认是22)
添加或改为port 22 ###通过ip找到主机,通过端口找到主机提供哪个服务。1-1024端口一般是系统服务的端口
2.设置监听ip
AddressFamily any ###不管是ipv4还是ipv6都支持
ListenAddress 0.0.0.0 ###监听服务器所有网卡的ip(服务器可以有多个网卡,就可能存在多个ip地址)
HostKey /etc/ssh/ssh_ XXXX_key ###记录服务器私钥位置,如果该位置私钥被删了,重启时会根据此参数重新生成私钥
3.设置不允许远程登录root账号
PermitRootLogin no ###有3种:yes、no、without-password,without-password表示允许且支持免密方式远程登录root账号
4.禁止使用密码身份验证方式登录
PasswordAuthentication yes改为no。然后systemctl reload sshd.service
说明:关闭后,就只有免密登录这一种方式了。需要确保用户在远程服务器上的
~/.ssh/authorized_ keys 文件中填充有公钥,以便可以登录
5.更多常用配置参数
6.设置注意事项
设置后,要systemctl reload sshd重新加载或者重启服务,配置的修改才会生效