天天看点

Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例

1 SSH简介

SSH (secure shell)为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登陆会话和其他网络服务提供安全性的协议。TCP port 22

2 纵向向比较

telnet(telecommunications network)

消息数据包为明文不加密,安全性差,容易被破解。TCP port 23

RDP (remote desktop protocal ) 连接

windows远程桌面管理(图形界面) TCP port 3389 and UDP port 3389

RFB (remote frame buffer) 图形化远程管理协议 连接

VNC (Virtual Network Computing)使用的协议。(在linux unix Macos 下的图形界面远程管理工具)

3 横向比较

SSH协议规范存在一些小版本的差异,但是有两个主要的大版本:SSH1 (版本号 1.XX) 和 SSH2 (版本号 2.00)。事实上,SSH1和SSH2是两个完全不同互不兼容的协议。SSH2明显地提升了SSH1中的很多方面。首先,SSH是宏设计,几个不同的功能(如:认证、传输、连接)被打包进一个单一的协议,SSH2带来了比SSH1更强大的安全特性,如基于MAC的完整性检查,灵活的会话密钥更新、充分协商的加密算法、公钥证书等等。

SSH2由IETF标准化,且它的实现在业界被广泛部署和接受。由于SSH2对于SSH1的流行和加密优势,许多产品对SSH1放弃了支持。在写这篇文章的时候,OpenSSH仍旧支持SSH1和SSH2,然而在所有的现代Linux发行版中,OpenSSH服务器默认禁用了SSH1。

sshd服务

提供两种安全验证方式

1 基于口令验证:经过验证账号和密码即可远程登陆主机,所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

2 基于密钥的安全验证:需要在本地生成密钥对后,将公钥发送给远程主机。客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。

sshd服务配置文件 (/etc/ssh/sshd_config)

#Port 22                           			 //默认端口号22
#ListenAddress 0.0.0.0						//设定ssh监听的ip地址
# The default requires explicit activation of protocol 1
#Protocol 2									//协议版本号
# HostKey for protocol version 1    //私钥
#HostKey /etc/ssh/ssh_host_key				
# HostKeys for protocol version 2  //私钥
HostKey /etc/ssh/ssh_host_rsa_key		
#HostKey /etc/ssh/ssh_host_dsa_key  //DSA私钥
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PubkeyAuthentication yes         //允许密钥登陆
#LogLevel INFO                                  日志的等级
# Authentication:
#LoginGraceTime 2m                           登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
#PermitRootLogin no
PermitRootLogin yes                            是否允许管理员直接登录,'yes'表示允许
#StrictModes yes                                 是否让sshd去检查用户主目录或相关文件的权限数据
#MaxAuthTries 6                                  最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
#MaxSessions 10                                 允许的最大会话数
#RSAAuthentication yes
#PubkeyAuthentication yes
The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
.AuthorizedKeysFile .ssh/authorized_keys                 服务器生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面,将公钥发给客户端
PasswordAuthentication yes                    是否允许支持基于口令的认证
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no     是否允许任何的密码认证
# Kerberos options                                   是否支持kerberos(基于第三方的认证,如LDAP)认证的方式,默认为no 
#UseDNS yes              是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
Subsystem sftp /usr/libexec/openssh/sftp-server                    支持 SFTP ,如果注释掉,则不支持sftp连接
AllowUsers user1 user2                登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录

           

sshd使用实例

1修改ssh使用端口

vim /etc/ssh/sshd_config

Port + 端口号

Systemctl restart sshd

Systemctl stop firewalld

添加防火墙允许策略

[[email protected] ~]# firewall-cmd --permanent --add-port=2222/tcp

[[email protected] ~]# firewall-cmd –reload #添加自定义端口到服务

[[email protected] ~]# semanage port -a -t ssh_port_t -p tcp 4444

注意:如果执行该命令时出现以下提示,请换个端口再试:

ValueError: Port tcp/4444 already defined

2拒绝root用户远程登陆

Vim /etc/ssh/sshd_config

PermitRootLogin no

Systemctl restart sshd

3允许特定用户使用ssh登陆,其他用户都无法登陆

使用白名单

Vim /etc/ssh/sshd_config

最后写入

AllowUsers + 用户名

Systemctl restart sshd

允许使用ssh登陆的用户 如果没写root; Permitroot yes root用户无法登陆

4虚拟机与虚拟机之间实现ssh互信,免密登陆

#创建密钥对

[[email protected] ~]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/redhat/.ssh/id_rsa): /选密钥对保存路径

Created directory ‘/home/redhat/.ssh’.

Enter passphrase (empty for no passphrase): /输入密码

Enter same passphrase again:

Your identification has been saved in /home/redhat/.ssh/id_rsa.

Your public key has been saved in /home/redhat/.ssh/id_rsa.pub.

#发送公钥给远程登陆主机

1)[[email protected] .ssh]# ssh-copy-id 172.24.8.131

2)scp /root/.ssh/id_rsa.pub [email protected]:/root/.ssh/authorized_keys

#远程登陆主机端

Vim /etc/ssh/sshd_config

#将允许密码登陆验证的参数设置为no

PasswordAuthentication no

#将允许密钥验证设置为yes

PubkeyAuthentication yes //允许密码同时允许密钥密码优先

Systemctl restart sshd

效果

Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例

5通过xshell远程免密登陆

在xshell中选工具菜单点击新建用户密钥生成向导 (如图)

Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例

密钥类型可选 长度可选

Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例
Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例

名称任意,可添加密码,增强安全性

Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例

生成公钥

继续阅读