jinhucheung / blog

学习笔记

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Linux 学习之服务器篇 远端连接服务器SSH

jinhucheung opened this issue · comments

commented

1. 前言

sshd是一个连线服务,我们可以在远端主机通过ssh访问我们主机,获取shell修改主机设置
过程十分便利,而且sshd是基于[非对称密钥]加密的通信,数据在其通道上传输较安全

commented

2. SSH连线服务

SSH(Secure SHell protocol)通过资料封包加密技术,将等待传输的数据包加密后再传输到网络上
SSH可以用来取代明文传输的finger/telent等连线服务

2.1 连线加密技术:非对称密钥

[资料加密]就是经过运算将原始数据转换成乱码,之后再传输到网络上,到达目标后再进行解密运算

加解密技术非常多,后面我们来介绍下目前常见的数据包加密技术[非对称密钥]系统,其通过两对不一样的公钥与密钥
进行加密/解密,在一个连线中,自己的公钥分别传给对方,用于加密数据包,而密钥则保存在本地,用于解密

非对称密钥系统示意图如下:

ssh具体连线过程:

  1. 服务器建立密钥文件 :
    当主机第一次启动sshd服务时,其会计算出公钥/私钥文件,保存在/etc/ssh/ssh_host_* 这些文件根据加密方式不同而分类,其中.pub为公钥文件,否为私钥文件
    主机下次启动sshd服务时,则主动寻找这些密钥文件
  2. 客服端主动连线要求:
    当客服端要连线sshd服务器时,通过ssh/pietty等程序来连接
  3. 服务器回传自己的公钥文件:
    服务器将公钥传给客服端
  4. 客服端记录/匹配服务器的公钥,并计算自己密钥文件 :
    客服端会将服务器的公钥记录在~/.ssh/known_hosts中,当下次连线时进行匹配即可,之后计算出自己的密钥文件保存在~/.ssh
  5. 客服端回传自己的公钥文件:
    此时双方都拥有[自己的私钥与对方的公钥]
  6. 开始双向加密解密传输
commented

2.2 启动SSH服务

ssh服务通过service ssh restart启动
而要开机启动ssh服务可以通过sysv-rc-confchkconfig

查看ssh服务监听状态: netstat -ntulp | grep ssh
ssh预设启动在port 22

2.3 SSH服务配置文件

ssh服务配置文件可以分为客服端配置以及服务器配置,这里我们说明服务器的配置,其为/etc/ssh/sshd_config

下面列出以下ssh常见的配置项目

Port 22   # SSH预设启动的端口
#Port 23  # 我们可以自己设置启动端口

Protocol 2  # SSH协议的版本

ListenAddress 0.0.0.0  # 设置监听的网络接口

PidFile /var/run/sshd.pid # SSHD的pid文件

# 主机的私钥放置文件
HostKey /etc/ssh/ssh_host_key        # SSH version 1 使用的私钥
HostKey /etc/ssh/ssh_host_rsa_key    # SSH version 2 使用的 RSA 私钥
HostKey /etc/ssh/ssh_host_dsa_key    # SSH version 2 使用的 DSA 私钥

PermitRootLogin yes  # 是否允许root登入

# 是否允许用户自行使用成对的密钥进行登入行为,针对version 2
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys   # 用户针对终端自制的公钥放置在自己home目录下 .ssh/authorized_keys 內

PasswordAuthentication yes  # 要密码验证


DenyUsers *  # 抵挡所有用户
DenyUsers test # 抵挡test这个用户的远端登入

DenyGroups test # 抵挡test群组

设置完配置文件后,重启ssh服务即生效

commented

2.4 ssh客服端连线程序-Linux:ssh/sftp/scp

2.4.1 ssh的用法

在客服端,我们可以通过ssh来连接服务器,一般用法如下:

ssh [-f] [-o 参数] [-p 非正规端口(正规为22)] [账号@]IP [指令]

参数:

  • f 需要配合后面的指令,执行完指令后立即登出
  • o 额外参数
    • ConnectTimeout=秒数 连线等待的时间
    • StrictHostKeyChecking=[yes|no|ask] 预设为ask 询问是否主动将服务器的公钥写入known_hosts中,no则直接写入
  • p 指定连接服务器上ssh服务监听的端口

2.4.2 sftp的用法

ssh是登入远端服务器进行工作,如果要从远端服务器下载/上传资源,我们可以直接使用sftp
通过sftp 账号@ip连接上服务器后,就如同ftp一样操作了,不明白指令时请输入help

2.4.3 scp的用法

正如同sftp是ftp的ssh版本一样,scp则是cp的ssh版,
比如我需要将本机的/etc/hosts文件上传至服务器中student的home目录下

scp /etc/hosts student@192.168.14.193:~

如需将服务器中/tmp目录下载至本地的/tmp中

scp  -pr root@192.168.14.193:/tmp  /tmp/

2.5 ssh客服端连线程序-Windows:pietty/psftp

2.5.1 直接连线putty/pietty

windows 要连接SSH服务器可以通过puttypietty,它们的下载点:

它们使用相当简单,提供服务器IP和SSH服务端口等信息就可以使用

2.5.2 sftp-server:psftp

putty官网也提供类似sftp功能的程序:psftp,用于连接远端SSH服务器,访问其资源。
open IP来连接服务器

2.6 ssh客服端连线程序-移动终端:serverauditor

移动终端要连接ssh服务器,可以通过serverauditor这个程序即可,设置上相当简单,以下是serverauditor官网

https://serverauditor.com/

commented

2.7 不用密码可立即登入的ssh用户

如果我们想让指定客服端通过ssh服务登入某个用户时,不需要输入密码,我们可以将客服端的公钥写入用户的~/.ssh/authorized_keys文件(sshd配置文件中AuthorizedKeysFile属性指定)中,表示对应此客服端,远端服务器认证了,简化传输步骤,下次连接时,客服端以及服务器都拥有了对方的公钥与自己的私钥

具体步骤如下:

  1. 修改服务端的配置文件/etc/ssh/sshd_config,注意PubkeyAuthentication要为yes,通过注意AuthorizedKeysFile的文件,
  2. 客服端建立密钥文件:authorized_keys -t rsa # 生成rsa的密钥
  3. 客服端放置好密钥文件: 将密钥文件放置在~/.ssh/
  4. 将客服端的公钥写入服务端的需登入用户的~/.ssh/authorized_keys:注意权限,~/.ssh应该是700authorized_keys权限应该是644
[jinhu@clientlinux ~]$ ssh-keygen -t rsa   # 客服端生成密钥文件

[jinhu@clientlinux ~]$ scp ~/.ssh/id_rsa.pub  kumho@192.168.14.193:~  # 将客服端的公钥写入客服端的authorized_keys
[kumho@servicelinux ~]$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

[kumho@servicelinux ~]$ chmod 700  ~/.ssh # 修改服务端权限
[kumho@servicelinux ~]$ chmod 644  ~/.ssh/authorized_keys