OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如telnet、ftp都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。
SSH是建立在应用层基础上的安全协议,是较为可靠的专为远程登录会话和其它网络服务提供安全性的协议,它可以有效防止远程管理过程中的信息泄露问题。SSH加密所有的传输数据,可以较好地抑制“中间人”攻击、防御DNS欺骗和IP欺骗。因为SSH传输的数据是经过压缩的,所以可以加快数据的传输速度。
两种远程访问方式:基于用户密码和基于主机秘钥。
openssh有两个版本,分别为v1和v2;v1:基于CRC-32做MAC,无法防范中间人(man-in-middle)攻击,v2:双方主机协议选择安全的MAC方式。基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证。
?
openssh软件包查询命令:rpm -qa|grep openssh
ssh服务的版本查看: ssh -V
ssh服务的状态/停止/启动:systemctl命令用于openssh服务状态的查看和设置
openSSH 的工作模式:
openSSH是基于C/S架构工作的
服务器端 ? ?//sshd,配置文件在/etc/ssh/sshd_config
客户端 ? ? //ssh,配置文件在/etc/ssh/ssh_config
openssh目录下文件:
1)ssh_config、sshd_config 分别是客户端和服务端配置文件
2)含有dsa的是dsa加密方式的私钥和公钥,为ssh v2算法使用
3)含有rsa的是dsa加密方式的私钥和公钥,为ssh v2算法使用
4)另外两个是ssh v1的私钥和公钥,因为安全性问题,目前市场上使用不多
ssh通过公钥加密的方式保持通信安全。当某一ssh客户端连接到ssh服务器时,在该客户端登录之前,服务器会向其发送公钥副本。这可用于为通信渠道设置安全加密,并可验证客户端的服务器。
当用户第一次使用ssh连接到特定服务器时,ssh命令可在用户的~/.ssh/known_hosts文件中存储该服务器的公钥。在此之后每当用户进行连接时,客户端都会通过对比~/.ssh/known_hosts文件中的服务器条目和服务器发送的公钥,确保从服务器获得相同的公钥。如果公钥不匹配,客户端会假定网络通信已遭劫持或服务器已被入侵,并且中断连接。
?
SSH协议版本1在安全方面存在漏洞,除非你因业务需要必须要连到旧不建议使用,建议使用SSH协议版本2
使用ssh-keygen生成的两把钥匙:
密钥(private key)被保留在你的系统上,默认的路径是root/.ssh目录
·通常使用口令保护(建议)
·ssh密钥类型为:DSA或RSA
·公钥(public key)使用ssh-copy-id命令被复制到目标系统
·ssh-copy-id-i~/.ssh/id rsa.pub user@host
·公钥和私钥的权限分别为644和600
OPENSSH基于秘钥的登录流程:
首先在客户端生成一对密钥->将公钥拷贝给服务端一份并重命名为authorized_keys->客户端向服务端发送一个连接请求,信息包括IP、用户名->服务端得到客户端的信息后,会到authorized_keys中查找,如果有响应的IP和用户名,服务端会随机生成一个字符串->服务端将字符串发送给客户端->客户端得到服务端发来的消息后,客户端会使用私钥进行加密,然后将加密后的字符串发送给服务端->服务端收到加密后的字符串会用公钥解密并跟先前生成的字符串进行比对,如果一致,就允许免密码登录
大致流程如下:
1)客户端生成RSA公钥和私钥
2)客户端将自己的公钥存放到服务器
3)客户端请求连接服务器,服务器将一个随机字符串发送给客户端
4)客户端根据自己的私钥加密这个随机字符串之后再发送给服务器
5)服务器接受到加密后的字符串之后用公钥解密,如果正确就让客户端登录,否则拒绝
?
目的:
在做集群的时候是需要SSH互信的,利于在另一节点操作方便。
操作步骤:
1、各节点生成自己的公钥和私钥对儿
命令:ssh-keygen
?
作用:创建公钥和密钥,会生成id_rsa和id_rsa.pub两个文件。生成ssh密钥后,密钥将默认存储在家目录下的.ssh/目录中。私钥和公钥的权限就分别为600和644。.ssh目录权限必须是700
??? ?选项:
??? ?-t rsa|dsa 默认是rsa格式。
2、将自己的公钥文件发送给对方
命令:ssh-copy-id
??? ?作用:是将id_rsa.pub文件内容传输至对方的 .ssh目录中,生成文件名为 authorized_keys 文件(不会覆盖文件,是追加到文件末尾)。 并且会设置远程主机用户目录的.ssh和.ssh/authorized_keys权限。
??? ?选项:
??? ?--i指定密钥文件 。如:ssh-copy-id -i /root/.ssh/id_rsa.pub USERNAME@HOST
虽然OpenSSH服务器通常无需修改,但会提供其他安全措施,可以在配置文件/etc/ssh/sshd_config中修改OpenSSH服务器的各个方面。
sshd_config参数介绍:(man sshd_config ? 查看配置文件帮助)
#Port 22 ? ?端口号,一般情况下要连接到互联网要更改为非标准端口号
#ListenAddress 0.0.0.0 ? ?哪个ip地址监听服务端口号 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
#PermitRootLogin yes ? 允许root登录,默认为yes,如果为no,则root不允许登录
#MaxAuthTries 6 ? 最大验证尝试次数为6,但验证时默认为3次
#MaxSessions 10 ? 指每个网络连接开启的会话次数
#PubkeyAuthentication yes ? ? ?基于密码验证
#UseDNS no ? ? ? ?建议更改为no,系统连接速度会变快
#AllowAgentForwarding yes ? ? ?允许代理转发
#MaxStartups 10:30:100 ? 限制并发连接数,当最大连接数不超过10次时,不受影响;当连接数超过10次时开始随机拒绝最大连接数的30%主机连接,70%不受影响;当连接数达到100时,拒绝全部主机连接
#Banner /path/file ? ?用户登录时的登录提示,可以在文件中写入提示语句,登录时显示该提示语句
1、目的
ssh服务可以说是最重要的服务之一,远程管理基本都是使用它。然而openssh版本经常出现漏洞,存在很大的安全风险,需要及时升级官方发布的ssh版本来修复漏洞。
2、步骤(源码编译安装升级OpenSSH)
1)升级前准备
安装telnet-server,防止openssh安装失败,而导致无法远程登陆服务器
安装必要软件的安装
备份/etc/ssh目录
下载OpenSSH新版本 https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/
2)安装openssl
3)安装openssh
4)修改ssh配置文件
1、使用ssh连接远程主机
$ ssh -p 10022 user@hostname ?\\SSH 默认连接到目标主机的 22 端口上,可以使用-p选项指定端口号
2、使用ssh在远程主机执行命令
$ ssh root@10.42.0.47 ls -l ?\\直接连接并在后面加上要执行的命令就可以了
3、scp命令使用
将本地文件复制到远程机:scp -r ./test/ root@111.222.333:/home/
将远程机文件复制到本地:scp -r root@111.222.333:/home/test ./home/
4、sftp命令使用
模拟 FTP 的文件传输方式
基于ssh服务
进入到 sftp 之后,一般 FTP 模式下的操作方法类似
1、修改ssh登录端口为2222,并使用终端工具登录测试服务器。
2、升级openssh服务至最新版本。
3、使用SCP和SFTP进行文件上传下载。