OpenSSH原理与配置

OpenSSH 是 SSH (Secure SHell)协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。因此,它既可以代替Telent又可以为FTP、POP、PPP提供一个安全的通道。它提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

OpenSSH的安装

在CentOS7上openssh已经默认安装了,无需重新安装。

查询服务的运行状态

[root@localhost ~]# systemctl restart sshd 重启服务

[root@localhost ~]# systemctl start sshd 开启服务

[root@localhost ~]# systemctl stop sshd 关闭服务

SSH服务的基本使用

一、口令登录

登录方式:ssh 用户名@IP地址 或者 ssh IP地址

第一次登录对方主机,系统会出现下面的提示:

只要输入yes就会把这台主机的识别信息添加到known_hosts中

默认情况下是使用本地的用户名连接到对方的用户名,双方的用户名是一致的。如果要是两端的用户不一样,则需要使用-l username 指定用户名登录

两端用户不一样

文件复制

将本机文件复制到远程服务端:scp 本地文件 username@host:拷贝目录

将远程服务器上的文件复制到本机:scp username@host:文件名 本地目录

SSH的常规配置

  1. 修改端口号。

需要进入SSH的配置文件/etc/ssh/sshd_config进行修改,SSH默认的端口号为22,可以修改一个比较大的。

修改完端口号之后重启服务,此时服务不一定能够正常重启。同时,需要对SELinux和防火墙进行设置。如何防火墙和selinux都关闭的话,不需要在对其进行设置,这里先关闭。

重启服务

远程连接,此时连接需要增加一个选项-p指定端口号

如果防火墙和SELinux没有关闭,需要进行以下操作。

SELinux给SSH开放端口:semanage port -a -t ssh_port_t -p tcp 端口号

semanage port -l|grep 服务名 查询该服务端口

防火墙开启相应端口:firewall-cmdt –add-port=端口号/tcp –permanen

重启加载防火墙:firewall-cmd –reload

  1. 禁止root登录

在Authentication(认证)部分,将#PermitRootLogin yes修改为no。在禁止root用户登录之后需要添加一个普通用户,重启ssh服务。

这里为了方便,就没有禁止。

二、公钥登录

需要现在配置文件中开启RSA认证(RSAAuthentication)和公钥认证(PubkeyAuthentication)。

客户机:192.168.1.4服务器:192.168.1.3

所谓”公钥登录”,原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。(来自阮一峰的网络日志-SSH原理与运用)

首先,在客户机生成一个公钥。

完成之后会生成两个文件,一个公钥(id_rsa.pub)一个私钥(id_rsa)。

将公钥发送到服务器上。

客户机登录服务器

上面使用的RSA生成的密钥对,同样也可以使用DSA。-b指定秘钥长度-t指定要创建的秘钥类型。

常见配置

1.禁止root用户远程登录

在sshd_config中修改如下就可以了:

PermitRootLogin no

2.禁止空密码登陆

在sshd_config这样修改:

PermitEmptyPasswords no

3.使用非默认端口,非22端口

Port 30003

根据你的心情,port随机的选一个,除了你自己,鬼知道你当时选的哪个端口.再打开/var/log/secure,看下世界是不是一下子清静了?再也没有烦人的用不同的帐号和密码尝试登陆的日志了.这招百试不爽.

4.限制ssh监听的ip

在sshd_config中修改如下:

ListenAddress 192.168.1.5

5.使用的协议版本2: ssh v2

在sshd_config中修改如下:

Protocol 2

6.禁用密码登陆,推荐使用密钥登录,并且私钥使用强密码加密

在sshd_config中修改如下:

PasswordAuthentication no

经过这点小的改动,你的ssh服务绝对又是一个质的提升.能够拿到你的私key,又知道服务器登陆的用户名和端口,这绝对不是一件简单的事儿吧.

7.限制连接IP,仅保证有限的机器能够远程访问

在/etc/hosts.allow输入

sshd:192.168.1.5:allow(其中192.168.1.5是你要允许登陆ssh的ip,或者是一个网段192.168.1.0/24.

在/etc/hosts.deny输入

sshd:ALL(表示除了hosts.allow中允许的,其他的ip拒绝登陆ssh.

使用 iptables 设置 ssh 服务安全访问策略。

8. 日志

记录好日志,经常做日志分析。

用户登录成功日志: /var/log/wtmp , 使用 # last 命令查看

用户登录失败日志: /var/log/btmp , 使用 # lastb 命令查看

查看所有用户上次登录情况: 使用 #lastlog [-u User]

SSH连接过程

1.远程主机收到用户的登录请求,把自己的公钥发给用户。

2.用户使用这个公钥,将登录密码加密后,发送回来。

3.远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

SSH可以防范的攻击类型:

1.数据包欺骗2.IP或主机欺骗3.口令截获4.网络嗅探5.插入攻击

注:本文中有些内容转载自互联网,因无法找到原作者所以为注明。