文章目录
- 一、基本简介
- 二、登录示例
- 2.1 当前用户登录
- 2.2 指定用户登录
- 三、ssh主机密钥
- 四、ssh免密登录
- 五、服务端配置文件
- 5.1 连接端口号
- 5.2 限制只能使用普通用户登录
- 5.3 密钥登录
- 六、SSH安全注意事项
一、基本简介
常见远程登录工具:
- telnet,认证明文,数据传输明文。
- ssh,通信过程及认证过程是加密的,主机认证,用户认证过程加密,数据传输过程加密。
- dropbear,嵌入式系统专用的SSH服务器端和客户端工具。
- scp :跨主机安全复制工具。常用参数: -r 递归复制;-P指定远程机的ssh连接端口;-q静默模式;-a全部复制。
Openssh认证方式:
- 基于口令认证,账号密码验证。
- 基于密钥认证,证书密钥验证。
工作模式:
- openSSH是基于C/S架构工作。
- C/S架构:client(客户端)/server(服务器端)。
- B/S架构:Browser(浏览器)/server , 网站,互联网电商公司使用。
- server服务器端 :sshd,配置文件在/etc/ssh/sshd_config,一般修改服务端配置文件。
- client客户端 :ssh,配置文件在/etc/ssh/ssh_config。
- ssh-keygen :密钥生成器。
- ssh-copy-id :将公钥传输至远程服务器。
二、登录示例
2.1 当前用户登录
- 以客户端当前用户远程登录到服务器端。若服务器端也存在一样的用户,则登录成功;否则,登陆失败。
2.2 指定用户登录
- 使用服务器端指定用户远程登录,后面可以接命令以此查看服务器端的相关信息。
- w命令可以显示当前登录到计算机的用户列表。
三、ssh主机密钥
ssh通信原理:
- ssh通过公钥加密的方式保持通信安全。当本地客户端ssh连接远程服务器时,在该客户端登录之前,服务器端会给本地发送它的公钥副本。
- 当用户第一次使用ssh连接到远程服务器时,ssh命令会在本地用户的~/.ssh/known_hosts文件中存储远程服务器的公钥。在此之后每当用户进行远程连接时,客户端都会拿 ~/.ssh/known_hosts文件中的服务器条目与服务器发送过来的公钥副本对比,确保从服务器获得相同的公钥。若公钥不匹配,则中断连接。
- 若远程服务器端由于硬盘故障原因导致它的公钥丢失,或者出于某些正当理由替换公钥,本地客户端则需要更新~/.ssh/known_hosts文件并删除旧的条目才能够进行登录。
四、ssh免密登录
- 第一步,本机生成一对密钥,分别为私钥和公钥。
- 第二步,将公钥复制到想远程登录的服务器上。
- 第三步,当本机ssh到目标服务器上时,目标服务器上存在的公钥与本机私钥对比,若是一堆密钥,则连接成功。
- 使用ssh-keygen命令生成密码。将会生成私钥/.ssh/id_rsa和公钥~/.ssh/id_rsa.pub。
1.生成密钥对,默认存储在/root/.ssh/目录,私钥和公钥的权限就分别为600和644,.ssh目录权限必须是700。
ssh-keygen -t ras
2.将生成的公钥拷贝到目标主机,并修改文件名称为authorized_keys,可在本机的/etc/ssh/sshd_config文件种查看。
ssh-copy-id root@192.168.130.161
3.此后再远程登录就不需要输入密码了。
五、服务端配置文件
- 一般修改服务端配置文件,/etc/ssh/sshd_config,其中有很多配置我们需要了解。
参数 | 释义 |
---|---|
Port | ssh连接服务端的端口号 |
HostKey | 客户端第一次连接服务端时,服务端发送给客户端的公钥,存放在客户端的~/.ssh/known_hosts文件中。 |
PermitRootLogin {yes|no} | 是否允许root用户远程登录系统,默认为yes。 |
StrictModes | 是否验证客户端第一次ssh登录服务时的key,默认为yes,需要用户手动输入yes或no确认。 |
MaxAuthTries | 最多能尝试连接的次数,默认为6。 |
MaxSessions | 最多能打开的终端数量,默认为10。 |
PubkeyAuthentication | 是否开启密钥验证登录,默认为yes。 |
PasswordAuthentication | 是否启用密码身份验证,默认开启 |
AuthorizedKeysFile | 免密登陆时,客户端需要把公钥放入服务端的.ssh/authorized_keys中。 |
UseDNS | 使用服务器域名连接登录。 |
5.1 连接端口号
- 默认的ssh连接端口为22,实际情况中是要修改的,减少黑客入侵概率。
1.修改服务端的配置文件连接端口号为999。
2.此时客户端去连接服务端需要指定端口号,否则连接失败。
5.2 限制只能使用普通用户登录
1.创建普通用户qingjun。
[root@localhost ssh]# useradd qingjun
[root@localhost ssh]# echo 'qingjun123' | passwd --stdin qingjun
2.修改配置文件参数禁止使用root用户登录,并重启sshd服务。
3.此时再用root用户登录该服务器会失败。
4.使用普通用户qingjun登录可以成功连接。
5.3 密钥登录
1.默认可以使用密钥登录。
2.修改配置文件,关闭密钥登录,并重启sshd服务。
3.再次登录该服务器时,就只能使用密码登录。
4.若要使用密钥登录,需要先生成windows本机的密钥对,然后将公钥放入linux虚拟机的.ssh/authorized_keys文件中。在shell工具上方的“工具”——“新建用户密钥生成导向”,然后开始生成win主机的密钥对,生成的公钥复制粘贴到linux服务器的.ssh/authorized_keys文件中并重启sshd服务。
六、SSH安全注意事项
1.密码应该经常换且足够复杂。
##生成随机密码,指定密码组成元素为a-z0-9_+,10代表密码长度。
tr -dc a-z0-9_+ < /dev/urandom | head -c 10 |xargs
##生成随机密码,可自定义密码长度。
openssl rand -base64 20
2.使用非默认端口。必须修改sshd配置文件中的默认端口号。
3.限制登录客户端地址。
4.仅监听特定的IP地址。
5.禁止管理员直接登录。
6.仅允许有限制用户登录:AllowUsers、AllowGroups
7.使用基于密钥的认证。
8.禁止使用空密码。
9.禁止使用SSHv1版本。
10.设定空闲会话超时时长。在/etc/baserc或/etc/profile文件里添加一行export TMOUT=10,表示xhell会话10秒不操作,则断开连接。永久不断开设置为0。
11.利用防火墙设置ssh访问策略。
12.限制ssh的访问频度和并发在线数。
13.做好日志的备份,经常分析(集中于某台服务器)。