ssh远程连接服务+免密+增加端口+用户锁定策略

1、有哪些可提供远程登录的类型

目前远程登录主要分为文字接口图形接口

  1. 文字接口明文传输:Telnet、RSH 等为主。
  2. 文字接口加密:SSH 为主,基本已经取代 Telnet、RSH 。
  3. 图形接口:XDMCP、VNC、XRDP 等较为常见。

数据的明文传输和加密传输

明文传输:指的是网络高手用tcpdump等工具获取传输的数据包以后,可以直接看到传输的内容。
加密传输:指的是数据在传输之前进行加密处理,如果有人获取数据包,那么他看到的是加密后的乱码。

2、使用SSH服务

现在的服务器默认ssh服务是开启的,所以我们可以直接使用。特别注意的是:在默认状态下,ssh协议本身就提供两个服务器功能。

  1. 一个就是类似Telnet的远程连接使用Shell的服务器,也就是SSH
  2. 另一个就是类似FTP服务的Sftp-Server,提供更安全的FTP服务。

1、重启ssh服务:

[root@192 ~]# systemctl restart  sshd
[root@192 ~]# netstat -anpt | grep ssh
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1175/sshd           
tcp        0      0 192.168.91.159:22       192.168.91.1:50906      ESTABLISHED 1146/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      1175/sshd           
[root@192 ~]# 

2、使用ssh登录服务器

[root@www ~]#  ssh  [-f]  [-o 参数项目]   [-p 非正规埠口]   [账号@]IP [指令]
 选项与参数:
     -f :需要配合后面的 [指令] ,不登入远程主机直接发送一个指令过去而已;
     -o 参数项目:主要的参数项目有:ConnectTimeout=秒数 :联机等待的秒数,减少等待的时间
                               StrictHostKeyChecking=[yes|no|ask]:预设是 ask,若要让 public key 主动加入 known_hosts ,则可以设定为 no 即可。
     -p :如果你的 sshd 服务启动在非正规的埠口 (22),需使用此项目;
     [指令] :不登入远程主机,直接发送指令过去。但与 -f 意义不太相同。
 
 # 1. 直接联机登入到对方主机的方法 (以登入本机为例):
 [root@www ~]# ssh 127.0.0.1
 The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
 RSA key fingerprint is 
eb:12:07:84:b9:3b:3f:e4:ad:ba:f1:85:41:fc:18:3b.
 Are you sure you want to continue connecting (yes/no)? yes
 Warning: Permanently added '127.0.0.1' (RSA) to the list of known hosts.
 root@127.0.0.1's password: <==在这里输入 root 的密码即可!
 Last login: Mon Jul 25 11:36:06 2011 from 192.168.1.101
 [root@www ~]# exit <==离开这次的 ssh 联机
 # 由于 ssh 后面没有加上账号,因此预设使用当前的账号来登入远程服务器

一般使用SSH应该采用“SSH登录的账号@ip”,但是当远程登录的用户和我们正在使用的用户是同一个名称,就可以直接ssh ip

3、登录时为什么输入yes
当你第一次登录某台服务器时,他会问你是否要去连接?

  1. yes:他会把你要登录的这台服务的指纹码(公钥)写入本机的~/.ssh/known_hosts文件下面。然后让你输入密码,之后可以进入文字接口。
  2. no:直接退出。

这很烦,我不想输入或者说我用脚本执行,你让我去输入yes? 这时ssh -o 参数 会帮你解决这个问题。

 [root@www ~]# ssh -o StrictHostKeyChecking=no   root@localhost
 Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
 root@localhost's password:
 # 如上所示,不会问你 yes 或 no 啦!直接会写入 ~/.ssh/known_hosts 当
中!

我能不能在这台服务上,给另外一台下指令,然后把结果返回来给我看到。

[root@192 ~]# ssh 192.168.91.159 date
root@192.168.91.159's password: 
2022年 01月 09日 星期日 16:42:29 CST
[root@192 ~]# 

我想让给另一台服务器下指令,不用给我返回结果

[root@www ~]# ssh -f student@192.168.91.159  find / &> ~/find1.log
 # 此时你会立刻注销 192.168.91.159 ,但 find 指令会自己在远程服务器跑喔!

4、ssh ip 无法登录

这个情况有多种,我曾经遇到多两种。

  1. 提示信息,22端口破裂或者22端口被拒绝,但是可以ping通。这种情况下,可能就是地址被占用。查一下你的子网掩码时候正确。
  2. 如果服务器换ip了,那么你要重新登录时就会发生这种情况。

第二种情况做一些原因说明

第一次ssh ip 远程登录时,主机会把远程服务器的指纹码写入~/.ssh/known_hosts下,等你更换ip以后再次登录,主机核对指纹码不对,就会感觉是恶意主机,从而拒绝登录。

解决办法

  • 编辑 ~/.ssh/known_hosts 文件,找到这条记录并删除。(建议使用)

3、ssh用到的连接加密技术介绍

目前常见的网络数据包加密技术通常是“非对称秘钥加密技术”。对称加密技术和非对称加密技术主要的区别是:是否使用同一把钥匙。
非对称秘钥加密技术:主要是通过两把不一样钥匙即公钥私钥来进行加密和解密的工程。由于这两把钥匙的作用是加密数据和解密数据用的,所以在同一方向的连接中,这两把钥匙是成对的,每台服务器产生的公钥与私钥并不相同。

  • 公钥(Public Key):提供给远程主机进行数据加密的行为,也就是说,公钥谁想要我就给谁,但是你们给我发消息必须要我的公钥加密。
  • 私钥(Private Key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。由于私钥很重要,因此私钥是不能够外流的,只能保护在自己的主机上。

加密过程

在这里插入图片描述

  1. 服务器建立公钥档: 每一次启动 sshd 服务时,该服务会主动去找 /etc/ssh/ssh_host*
    的档案,若系统刚刚安装完成时,由于没有这些公钥档案, 因此 sshd 会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需
    要的私钥档;
  2. 客户端主动联机要求: 若客户端想要联机到 ssh 服务器,则需要使用适当
    的客户端程序来联机,包括 ssh, pietty 等客户端程序;
  3. 服务器传送公钥档给客户端: 接收到客户端的要求后,服务器便将第一个
    步骤取得的公钥档案传送给客户端使用 (此时应是明码传送,反正公钥本来就是
    给大家使用的!);
  4. 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥:若客户端第
    一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的
    ~/.ssh/known_hosts 。若是已经记录过该服务器的公钥数据,则客户端会去比
    对此次接收到的与之前的记录是否有差异。若接受此公钥数据, 则开始计算客
    户端自己的公私钥数据;
  5. 回传客户端的公钥数据到服务器端: 用户将自己的公钥传送给服务器。此
    时服务器:『具有服务器的私钥与客户端的公钥』,而客户端则是: 『具有服
    务器的公钥以及客户端自己的私钥』,你会看到,在此次联机的服务器与客户端
    的密钥系统 (公钥+私钥) 并不一样,所以才称为非对称式密钥系统喔。
  6. 开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥
    加密后送出。客户端接收后,用自己的私钥解密; (2)客户端到服务器:客户端
    传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。

4、开启telnet

node-2做升级,node-1可以登录node-2

1、先做Telnet登录,防止升级失败

node-2 安装telnet服务

yum -y install xinetd telnet-server

telnet-server是由xinetd管理,需要安装xinetd,这里启动的是telnet.socket而不是telnet.service。默认情况下,PAM 模块限制root不能telnet到 telnet-server,如果telnet 时报 Login incorrect 时,可以把下面的文件进行注释掉;
在这里插入图片描述
2、启动服务

systemctl enable xinetd.server
systemctl enable telnet.socket
systemctl start telnet.socket
systemctl start xinetd.service

3、测试

[root@192 ~]# telnet 192.168.91.183 
Trying 192.168.91.183...
Connected to 192.168.91.183.
Escape character is '^]'.

Kernel 3.10.0-1160.el7.x86_64 on an x86_64
192 login: root
Password: 
Login incorrect

192 login: jiaofan
Password: 
Last login: Sun Jan  9 17:35:30 from 192.168.91.159
[jiaofan@192 ~]$ sudo sh
[sudo] jiaofan 的密码:
sh-4.2# bash
[root@192 jiaofan]#

5、增加端口

1、修改配置文件,并重启服务

[root@localhost ~]# vi /etc/ssh/sshd_config
#增加10022端口
Port 22
Port 10022
[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# netstat -anptl | grep sshd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3139/sshd           
tcp        0      0 0.0.0.0:10022           0.0.0.0:*               LISTEN      3139/sshd           
tcp        0     52 192.168.91.142:22       192.168.91.1:54910      ESTABLISHED 1202/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      3139/sshd           
tcp6       0      0 :::10022 

2、如果selinux未关闭

#查看sshd端口
[root@localhost ~]# semanage port -l|grep ssh
#执行开放10022端口
[root@localhost ~]# semanage port -a -t ssh_port_t -p tcp 10022
如果没有装semanage
[root@localhost ~]# yum install policycoreutils-python

3、防火墙Firewalls开放端口

#添加端口
[root@localhost ~]# firewall-cmd --add-port=10022/tcp --permanent
#重新加载防火墙
[root@localhost ~]# firewall-cmd --reload

6、用户锁定策略

1、修改配置文件并重启ssh服务

[root@localhost ~]#  vi   /etc/pam.d/sshd
#加入这一句话
auth required pam_tally2.so  onerr=fail  deny=3 unlock_time=300 even_deny_root  root_unlock_time=300
[root@localhost ~]# systemctl restart sshd

在这里插入图片描述

  1. onerr=fail 表示定义了当出现错误时的缺省返回值;
  2. even_deny_root 表示也限制root用户;
  3. deny 表示设置普通用户和root用户连续错误登陆的最大次数,超过最大次数,则锁定该用户;
  4. unlock_time 表示设定普通用户锁定后,多少时间后解锁,单位是秒;
  5. root_unlock_time 表示设定root用户锁定后,多少时间后自动解锁否则手动,单位是秒;

2、用户被锁定以后的解锁命令

#查看用户登录失败的次数
[root@localhost ~]# pam_tally2 --user root
#解锁
[root@localhost ~]# pam_tally2  -r  -u   jiaofan

3、命令行锁定用户密码

#锁定用户
[root@localhost ~]# passwd -l jiaofan
锁定用户 jiaofan 的密码 。
passwd: 操作成功
#查看状态
[root@localhost ~]# passwd -S jiaofan
jiaofan LK 2022-04-22 0 99999 7 -1 (密码已被锁定。)
#用户解锁
[root@localhost ~]# passwd -u jiaofan
解锁用户 jiaofan 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -S jiaofan
jiaofan PS 2022-04-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@localhost ~]# 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值