admin 管理员组

文章数量: 887021

SSH

SSH

常用远程连接软件

  • Putty:PuTTY为一开放源代码软件,只有500多k,小巧轻便,但功能单一

  • SecureCRT:SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。缺点是颜色方案不符合大众习惯

  • XShell:Xshell是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。缺点:收费

  • MobaXterm:功能强大且免费

SSH

概述

  • SSH是一种网络协议,用于计算机之间的加密登录。用户可以从本地计算机,使用SSH协议远程登录另一台计算机。

  • sshd服务该服务基于SSH协议,用于远程连接,服务随系统自动安装

  • sshd服务

    • 22端口
    • TCP协议
  • 基于C/S架构,客户端ssh,服务端openssh

加密算法

对称加密算法(DES)

  • 发送方使用密钥明文数据加密成密文,发送出去

  • 接收方收到密文后,使用同一个密钥将密文解密成明文

非对称加密算法(RSA)

  • 公钥跟私钥一一对应,公钥可公开,私钥自己私有
  • 接收方将公钥发给发送方
  • 发送方使用接收方发送过来的公钥明文数据加密成密文,发送出去
  • 接收方收到密文后,使用自己本地留存的私钥将密文解密成明文

DES&RSA比较

比较项对称加密非对称加密
密钥相同不同,但有对应关系
加密速度较快较慢
数据传输速度较快较慢
安全性较低较高

SSH认证

基于用户名密码认证

原理
  • 客户端向服务端发起一个登录请求

  • 服务端将自己的公钥发送给客户端

  • 客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端

  • 服务端收到客户端发过来的加密密码后使用本地留存的私钥进行解密

  • 服务端将解密出来的密码和/etc/shadow文件里的用户密码对比认证

  • 服务端认证成功,则返回登录成功结果,并发送一个随机会话口令给客户端,该口令用于后面两台主机进行数据传输的一个临时加密会话口令

远程连接
获取服务端的ip
[root@server ~]# ip a
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:76:f9:7d brd ff:ff:ff:ff:ff:ffinet 192.168.226.10/24 brd 192.168.226.255 scope global noprefixroute ens33valid_lft forever preferred_lft foreverinet6 fe80::1b78:bfb3:4567:b45c/64 scope link noprefixroute valid_lft forever preferred_lft forever
ip地址为192.168.226.10输入设置的密码即可登录
[root@client ~]# ssh root@192.168.226.10
root@192.168.226.20's password: 
Last failed login: Sat Aug 21 15:46:55 CST 2021 from node1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Sat Aug 21 15:35:38 2021 from 192.168.226.1

基于密钥对认证

原理
  • 在客户端生成一个密钥对(公钥和私钥)
  • 客户端将公钥发给服务端,服务端将其保存在~/.ssh/authorized_keys
  • 客户端发起向服务端发起一个登录请求,服务端比对公钥(再次发来的公钥与保存在~/.ssh/authorized_keys中的公钥是否一致)
  • 比对一致后,服务端会生成随机字符串,再通过客户端发来的公钥加密
  • 服务端将加密后的字符串发送给客户端
  • 客户端收到后,通过本地私钥解密,然后将解密后的字符串发回非服务端
  • 服务端比对字符串,验证与生成的字符串是否一致
  • 一致,即可登录成功能
免密登录
客户端主机中生成“密钥对” 
[root@client ~]# ssh-keygen  #一直回车即可
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:olnJ6qKrHOywFyCOr3elrSjJewf+Tbwn4CG1zNJS1+8 root@client
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|        .        |
|o    + o .       |
|+.  * B S .      |
|o..= %o.   .     |
|o=..X+oo  .      |
|*o*=oo+... E     |
|B@+o=o oo        |
+----[SHA256]-----+
[root@client ~]# ls /root/.ssh/
id_rsa  id_rsa.pub
id_rsa私钥文件
id_rsa.pub公钥文件(public)将公钥文件传送至远程主机(如果默认端口更改,需要-p指定端口号)
[root@client ~]# ssh-copy-id root@192.168.226.20
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.226.20 (192.168.226.20)' can't be established.
ECDSA key fingerprint is SHA256:+RvxL8ZDWnyO030Z5rOfjBuJaOG1yFvD9ieOY9uzWBA.
ECDSA key fingerprint is MD5:d2:a2:8c:c6:60:15:46:9b:09:75:ce:3f:e1:ea:6e:aa.
Are you sure you want to continue connecting (yes/no)? yes
/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@192.168.226.20's password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh 'root@192.168.226.20'"
and check to make sure that only the key(s) you wanted were added.[root@server ~]# ls /root/.ssh/
authorized_keys <--客户端发来的公钥文件也可以先在远程主机上创建~/.ssh/authorized_keys文件,然后把客户端公钥文件里面的内容复制到该文件内

~/.ssh : 700
~/.ssh/authorized_keys : 600

这两个文件的权限不要随意修改,否则可能导致免密失败

SSH服务搭建

为安全考虑,有如下要求:

  • 禁止root远程登录
  • sshd服务不允许使用默认22端口,防止自动脚本攻击
  • 客户端用户的账号密码使用专业工具随机生成
准备环境
[root@server ~]# systemctl stop firewalld.service 
[root@server ~]# systemctl disable firewalld.service 
[root@server ~]# setenforce 0
setenforce: SELinux is disabled
[root@server ~]# sed -i 's/enforced/disabled/' /etc/selinux/config 安装openssh,默认已安装(此步骤可忽略)
[root@server ~]# yum install -y openssh
[root@server ~]# rpm -ql openssh-server 查看生成了哪些服务端文件
/etc/pam.d/sshd
/etc/ssh/sshd_config 主配置文件
/etc/sysconfig/sshd 
/usr/lib/systemd/system/sshd-keygen.service
/usr/lib/systemd/system/sshd.service
/usr/lib/systemd/system/sshd.socket
/usr/lib/systemd/system/sshd@.service
/usr/lib64/fipscheck/sshd.hmac
/usr/libexec/openssh/sftp-server
/usr/sbin/sshd
/usr/sbin/sshd-keygen 用于生成公钥和私钥
/usr/share/man/man5/moduli.5.gz
/usr/share/man/man5/sshd_config.5.gz 配置文件的帮助信息
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
/var/empty/sshd
[root@server ~]# rpm -ql openssh-clients  查看生成了哪些客户端文件
/etc/ssh/ssh_config
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
/usr/lib64/fipscheck/ssh.hmac
/usr/libexec/openssh/ssh-pkcs11-helper
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/slogin.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz修改配置文件
[root@server ~]# man 5 sshd_config 查看配置文件的帮助信息
[root@server ~]# vim /etc/ssh/sshd_config 
17 Port 2882 修改sshd默认端口
38 PermitRootLogin no 禁止root远程登录
[root@server ~]# systemctl restart sshd创建普通职员
[root@server ~]# groupadd staff
[root@server ~]# useradd -g staff staff1
[root@server ~]# useradd -g staff staff2为用户设置密码(pwgen)
[root@server ~]# yum install -y epel-release.noarch 
[root@server ~]# yum install -y pwgen
[root@server ~]# pwgen --help
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]
Options supported by pwgen:-c or --capitalizeInclude at least one capital letter in the password至少包含一个大写字母-n or --numeralsInclude at least one number in the password至少包含一个数字-s or --secureGenerate completely random passwords生成完全随机密码-B or --ambiguousDon't include ambiguous characters in the password不包含歧义字符(1&l,0&o)-1Don't print the generated passwords in columns不在列中打印密码(一行一个)
[root@server ~]# pwgen -cnBs1 10 2
YPurX4FCTd     密码分配给staff1
H9F9aYXrzJ     密码分配给staff2
[root@server ~]# passwd staff1
更改用户 staff1 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@server ~]# passwd staff2
更改用户 staff2 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。为员工创建数据目录,指定权限
[root@server ~]# mkdir -p /jobs/staff
[root@server ~]# chgrp -R staff /jobs/staff/
[root@server ~]# chmod 1770 /jobs/staff/
[root@server ~]# ll -d /jobs/staff/
drwxrwx--T 2 root staff 6 8月  21 21:39 /jobs/staff/测试
[root@client ~]# ssh root@192.168.226.10
The authenticity of host '192.168.226.10 (192.168.226.10)' can't be established.
ECDSA key fingerprint is SHA256:+RvxL8ZDWnyO030Z5rOfjBuJaOG1yFvD9ieOY9uzWBA.
ECDSA key fingerprint is MD5:d2:a2:8c:c6:60:15:46:9b:09:75:ce:3f:e1:ea:6e:aa.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.226.10' (ECDSA) to the list of known hosts.
root@192.168.226.10's password: 
Permission denied, please try again.
root@192.168.226.10's password: 
Permission denied, please try again.
--------------------------------------------------root用户不允许登录
[root@client ~]# ssh staff1@192.168.226.10 -p 2882
staff1@192.168.226.10's password: 
[staff1@server ~]$ cd /jobs/staff/
[staff1@server staff]$ touch test.txt
[staff1@server staff]$ exit
登出
Connection to 192.168.226.10 closed.
--------------------------------------------------
[root@client ~]# ssh staff2@192.168.226.10 -p 2882
staff2@192.168.226.10's password: 
[staff2@server ~]$ cd /jobs/staff/
[staff2@server staff]$ mkdir dir1
[staff2@server staff]$ ll
总用量 0
drwxr-xr-x 2 staff2 staff 6 8月  21 22:28 dir1
-rw-r--r-- 1 staff1 staff 0 8月  21 22:26 test.txt
[staff2@server staff]$ rm -rf test.txt 
rm: 无法删除"test.txt": 不允许的操作
----------------------------------------staff2不能删除staff1创建的文件

文件传输

scp 远程拷贝文件

  • 基于ssh协议

  • 主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

  • 两台主机都必须为Linux系统,不能跨操作系统

下载到本地(server1)
[root@server2 ~]# ls
anaconda-ks.cfg  dir1  video.mp4
[root@server1 ~]# scp root@192.168.226.20:/root/video.mp4 ./
root@192.168.226.20's password: 
video.mp4 
[root@server1 ~]# scp -r root@192.168.226.20:/root/dir1 ./
root@192.168.226.20's password: 
[root@server1 ~]# ls
anaconda-ks.cfg  a.txt  dir1  video.mp4上传到远程(aliyun-server)
[root@server1 ~]# scp  ./video.mp4 root@120.24.76.94:/tmp/
The authenticity of host '120.24.76.94 (120.24.76.94)' can't be established.
ECDSA key fingerprint is SHA256:9pEHWkFQ19qj+ZYAyORdvYejZfSXWhjfgwHyfbXMPss.
ECDSA key fingerprint is MD5:a9:2a:14:cb:1b:bb:2a:09:65:7c:91:04:d6:f3:a2:b0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '120.24.76.94' (ECDSA) to the list of known hosts.
root@120.24.76.94's password: 
video.mp4                                                                           100%   40MB   6.9MB/s   00:05    
[root@server1 ~]# scp -r ./dir2 root@120.24.76.94:/tmp/
root@120.24.76.94's password: 
[root@aliyun-server ~]# ls /tmp
dir2 video.mp4选项说明:
-r:递归,针对文件夹
-P:指定sshd服务端口,不加该选项默认22端口

lrzsz (Windows与Linux互传文件)

yum install lrzsz -yrz
选择文件,存到Linuxsz test1
选择存放位置,可存到Windows中

本文标签: SSH