SSH

SSH是一套网络协议,它的目的在于安全的网络服务和加密的远程登录,实现了ssh协议的最主流开源软件是openssh。

以前使用FTP或者TELNET登录服务器,都是以明文的形式在网络中发送账号和密码,很容易被黑客截取到

数据,篡改后威胁到服务器的安全。因此何如对数据加密,安全传输成为了重中之重。

主要方式有两种:

  1.对称加密

  2.非对称加密

为防止中间人攻击

# 扫描server端指纹信息
yumac: ~ yuchao$ssh-keyscan -t ecdsa 123.206.16.61| ssh-keygen -lf -
# 123.206.16.61:22 SSH-2.0-OpenSSH_7.4
256 SHA256:CVwhwfUkaLPrretR4pGltYRL6QB+5lyI 123.206.16.61 (ECDSA)

进行对比

基于公钥认证

基于口令的认证存在一些缺点,每次登录都需要输入密码,当我们机器数量众多就难以维护了。

我们更希望能够免密登录,公钥登录

公钥登录流程如下:

  1.client发送自己的公钥给server,写入server的authorazed_keys中

  2.server端接受到client的连接请求后,在自己的authorized_keys文件中匹配client的公钥信息pubkey,并

生成一个随机数R,使用client的公钥pubkey针对该随机数R进行加密,得到一个加密后的随机数pubkeyR。

  3. client通过私钥解密得到随机数R,再对随机数R和当前会话sessionkey采用MD5生成摘要Digest1,再发送

给server端。

  4. server端会对随机数R和当前client的sessionkey用同样的摘要算法生成Digest2.

  5. 结果比较client发来的Digest1与Digest2是否一致,正确则完成认证。

ssh登录原理

 

配置ssh公钥认证

# client本地生成公私钥
[root@chaogelinux .ssh]# ssh-keygen -t rsa  #指定rsa密钥类型,默认一路回车

#会生成如下的公私钥
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

#发送client公钥到server中
#发送自己的公钥,写入到远端server的authorized_keys中
yumac: ~ yuchao$ssh-copy-id root@123.206.16.61
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/yuchao/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@123.206.16.61's password:

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh 'root@123.206.16.61'"
and check to make sure that only the key(s) you wanted were added.

#直接输入登录命令即可
yumac: ~ yuchao$ssh root@123.206.16.61   
Last failed login: Fri Jan  3 16:54:46 CST 2020 from 189.39.13.1 on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Fri Jan  3 16:14:59 2020 from 222.35.146.118
[root@chaogelinux ~]#
[root@chaogelinux ~]# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbkHjqnRe31HCteHc0BSfovvs9GqutyBfWvAJQy51Std1Ir3qBnHs29aKjwPL/jm/xHlZWgQ8mD/Xr091j2EVwGKUSMfCfH9nwbfu+0mwfwZKseJx5uliERShCpkRzA3Bhe6KOAqL1cgpfFzwKzO2Raga1PIGiCYcM/DIDlQh75/rEk9H5FGutamGiGrrtJfL4drRg6zEknrxSDWAMB3/MH6WUmkSWmGnECxOsPSy1PJN6Kqp1B yuchao@yumac

  

SSH配置文件

[root@chaogelinux ~]# grep -Ev '^$|^[# ]' /etc/ssh/sshd_config
Port 22    #默认端口
AddressFamily any    #配置地址家族,any支持ipv4,ipv6
ListenAddress 0.0.0.0 #设置sshd服务监听的ip地址,注意多网卡的绑定
HostKey /etc/ssh/ssh_host_rsa_key  #ssh各密钥存放的位置 
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
PermitRootLogin yes  #是否允许root管理员直接登录,保证系统安全
StrictModes yes    #当用户的私钥改变,直接拒绝连接
MaxAuthTries 6    #最大密码尝试次数
MaxSessions 10    #最大终端数
AuthorizedKeysFile .ssh/authorized_keys    #信任主机的公钥文件存放地
PasswordAuthentication yes #是否设置密码验证机制
PermitEmptyPasswords no  #是否允许空密码登录,禁止

  

SSH与服务器安全

1. 修改SSH的端口,port 

2. 禁止root登录,PermitRootLogin no

3. 禁止用密码登录,只能用被信任的机器,用公私钥进行登录,PasswordAuthentication no

# 创建一个普通的用户且支持公钥登录
1.登录服务器,创建普通用户,设置登录密码
useradd yuchao
passwd yuchao

2.在自己本地机器,生成一个普通用户的公私钥对
ssh-keygen -t rsa
3.发送公钥给服务器,配置公钥登录
ssh-copy-id yuchao@192.168.178.142

4.在正确配置了公私钥登录之后,yuchao这个用户就可以免密登录linux服务器了
ssh yuchao@192.168.178.142
# 在Linux上配置该用户支持sudo命令
1.使用root登录服务器,配置yuchao用户支持sudo命令
vim  /etc/sudoers文件
添加如下行
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
yuchao  ALL=(ALL)       ALL

2.此时尝试用yuchao用户登录,是否能够使用sudo命令
# 修改ssh的配置文件如下
修改/etc/ssh/sshd_config 文件的如下参数,此时一个安全的ssh服务器以及配置完毕,参数如下

[root@chaoge_linux ~]# grep -Ev '^$|^[# ]' /etc/ssh/sshd_config
Port 23354
AddressFamily any
ListenAddress 0.0.0.0
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin no
AuthorizedKeysFile    .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem    sftp    /usr/libexec/openssh/sftp-server
# 重启ssh服务,此时就不能用root登录,只允许这个免密用户登录了

  当然如上配置需根据自己的工作环境配置,灵活学习,灵活使用。

1.使用root用户重启sshd服务
ssh root@192.168.178.142

2.重启sshd服务
systemctl restart sshd

3.此时机器已经禁止root登录,禁止密码登录,且修改了ssh端口为23354

4.此时只能使用配置好的yuchao用户进行免密登录了
ssh yuchao@192.168.178.142 -p 23354

  

screen 

1. 远程会话恢复:由于网络中断,导致的会话断开,需要重新连接,screen能确保用户不会丢失对远程会话的控制

2. 多窗口,运行多个远程会话

3. 会话共享:多个用户同时登录到远程服务器时,可以使用会话共享功能让用户之间的数据共享

screen常用参数

参数 作用
-S 创建会话窗口
-A 所有的窗口都调整为当前终端大小
-d 断开screen进程(得有用户时Attached状态,)
-ls 同于-list,显示目前所有的screen
-r 恢复离线的screen进程,可以指定多个PID,TTY,HOST
-x

恢复离线的screen作业

-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业
1.提前配置好epel仓库源
[root@chaogelinux ~]# yum install screen -y

2.直接安装
[root@chaogelinux ~]# yum install screen -y


1.进入一个新的screen会话,名字叫做s1
[root@chaogelinux ~]# screen -S s1

2.此时会立刻进入screen,检查会话信息
[root@chaogelinux ~]# screen -ls
There is a screen on:
        27686.s1        (Attached)
1 Socket in /var/run/screen/S-root.

3.想要退出screen会话,直接输入exit
[root@chaogelinux ~]# screen -S s1
[screen is terminating]



########################


# 模拟突然断开远程会话

1.新建一个会话,执行一个持续执行的任务
[root@chaogelinux ~]# screen -S myPing

2.执行一个ping任务
ping baidu.com

3.直接关闭窗口

4.检查screen会话
发现有个myPing是挂掉的状态
[root@chaogelinux ~]# screen -ls
There is a screen on:
    28570.myPing    (Detached)
1 Socket in /var/run/screen/S-root.

5.恢复会话
[root@chaogelinux ~]# screen -r myPing

6.退出会话直接exit

7.还可以再次尝试用screen新建一个会话,使用vim编辑文件,然后关闭窗口

  

 # 会话共享

1.小王同学创建一个screen会话,等待超哥连接
screen -S shareScreen


2.超哥登录服务器,查看以存在的会话信息
[root@chaogelinux ~]# screen -ls

3.超哥加入会话,且开始操作,协助小王解决问题,小王坐在电脑前默默观看
screen -x  shareScreen

4.小王默默观看超哥一顿输出,解决bug

5.超哥退出screen输入ctrl + a + d 组合键,留下小王满意的笑容
ctrl + a + d #超哥退出screen

6.小王退出screen,正常操作linux
exit

  

 

 

原文地址:https://www.cnblogs.com/abc1234567/p/14141389.html