概述
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
或
添加防火墙允许策略
[root@web ~]# firewall-cmd --permanent --add-port=2222/tcp
[root@web ~]# firewall-cmd –reload #添加自定义端口到服务
[root@web ~]# 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互信,免密登陆
#创建密钥对
[redhat@localhost ~]$ 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)[root@localhost .ssh]# ssh-copy-id 172.24.8.131
2)scp /root/.ssh/id_rsa.pub root@172.24.8.131:/root/.ssh/authorized_keys
#远程登陆主机端
Vim /etc/ssh/sshd_config
#将允许密码登陆验证的参数设置为no
PasswordAuthentication no
#将允许密钥验证设置为yes
PubkeyAuthentication yes //允许密码同时允许密钥密码优先
Systemctl restart sshd
效果
5通过xshell远程免密登陆
在xshell中选工具菜单点击新建用户密钥生成向导 (如图)
密钥类型可选 长度可选
名称任意,可添加密码,增强安全性
生成公钥
最后
以上就是勤恳网络为你收集整理的Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例的全部内容,希望文章能够帮你解决Linux学习笔记 -- ssh1 SSH简介2 纵向向比较3 横向比较sshd服务sshd使用实例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复