一、ssh服务介绍
ssh: secure shell protocol, 22/tcp, 安全的远程登录,实现加密通信,代替传统的 telnet 协议 具体的软件实现: OpenSSH:ssh协议的开源实现,CentOS 默认安装 dropbear:另一个ssh协议的开源项目的实现 SSH 协议版本 v1:基于CRC-32做MAC,不安全;man-in-middle v2:双方主机协议选择安全的MAC方式,基于DH算法做密钥交换,基于RSA或DSA实现身份认证 1、公钥交换原理 客户端发起链接请求 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥) 客户端生成密钥对 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥) 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都 会被加密 2、ssh加密通讯原理二、openssh 服务 OpenSSH是SSH (Secure SHell) 协议的免费开源实现,一般在各种Linux版本中会默认安装,基于C/S 结构 Openssh软件相关包: openssh openssh-clients openssh-server 1、客户端 ssh命令
2、其它ssh客户端工具
(1)scp命令(2) rsync 命令
(3) sftp命令
(4)自动登录 ssh工具 sshpass
3、ssh登录验证方式介绍
ssh服务登录的常用验证方式 用户/口令 基于密钥 基于用户和口令登录验证 1. 客户端发起ssh请求,服务器会把自己的公钥发送给用户 2. 用户会根据服务器发来的公钥对密码进行加密 3. 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功 基于密钥的登录方式 1. 首先在客户端生成一对密钥(ssh-keygen) 2. 并将客户端的公钥ssh-copy-id 拷贝到服务端 3. 当客户端再次发送一个连接请求,包括ip、用户名 4. 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:magedu 5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端 6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端 7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录 4、实现基于密钥的登录方式5、 ssh服务器配置
服务器端:sshd 服务器端的配置文件: /etc/ssh/sshd_config 服务器端的配置文件帮助:man 5 sshd_config 常用参数 Port 22 #生产建议修改 ListenAddress ip LoginGraceTime 2m PermitRootLogin yes #默认ubuntu不允许root远程ssh登录 StrictModes yes #检查.ssh/文件的所有者,权限等 MaxAuthTries 6 #pecifies the maximum number of authentication attempts permitted per connection. Once the number of failures reaches half this value, additional failures are logged. The default is 6. MaxSessions 10 #同一个连接最大会话 PubkeyAuthentication yes #基于key验证 PermitEmptyPasswords no #空密码连接 PasswordAuthentication yes #基于用户名和密码连接 GatewayPorts no ClientAliveInterval 10 #单位:秒 ClientAliveCountMax 3 #默认3 UseDNS yes #提高速度可改为no GSSAPIAuthentication yes #提高速度可改为no MaxStartups #未认证连接最大值,默认值10 标签:第十六,公钥,服务,登录,ssh,加密,服务端,客户端 From: https://www.cnblogs.com/dujy/p/17992797