循序渐进理解SSH(Secure Shell)

我是从《鸟哥私房菜》这本书开始接触Linux系统的,其中第六章开头的时候有句话一直不能理解:“Linux最优秀的地方之一,就是在于它的多用户、多任务环境”,你再多用户,一次不还是只是一个键盘和鼠标吗?那么多用户又有什么用呢?最近看了一下SSH相关的内容,让我有了新的体会。

一、SSH是远程Shell

Shell是一个作为用户与Linux系统间的接口程序,它允许用户向操作系统输入需要执行的命令。Linux系统用户根据角色可分为三种:

  • root用户:拥有对系统最高管理权限
  • 普通用户:只能对自己目录下的文件进行访问和修改,具有登录系统的权限,例如上面提到的www用户、ftp用户等
  • 虚拟账户:也叫“伪”用户,这类用户最大的特点是不能登录系统,它们的存在主要是方便系统管理,满足相应的系统进程对文件属主的要求。例如系统默认的bin、adm、nobody用户等,一般运行的web服务,默认就是使用的nobody用户,但是nobody用户是不能登录系统的。

用户的配置个人信息一般存放在~/xxx中,如本次的主角SSH.ssh相关的配置文件;还有环境变量.bashrc,git配置文件.gitconfig和常见的vim配置.vimrc。修改完之后一般要使用source或者.让shell重新读取配置。

对于所有用户的配置一般放在/etc文件夹中,同样对于SSH服务器而言,其配置放置/etc/ssh/sshd_config中。了解这些配置是必要的,因为在登陆远程Shell的时候需要对其进行一定的设置。

二、SSH是系统多用户多任务的一种手段

Linux是一个真实的、完整的多用户多任务操作系统,多用户多任务就是可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响,例如某台linux服务器上有4个用户,分别是root、www、ftp和mysql,在同一时间内,root用户可能在查看系统日志,管理维护系统,www用户可能在修改自己的网页程序,ftp用户可能在上传软件到服务器,mysql用户可能在执行自己的SQL查询,每个用户互不干扰,有条不紊的进行着自己的工作,而每个用户之间不能越权访问,比如www用户不能执行mysql用户的SQL查询操作,ftp用户也不能修改www用户的网页程序,因此可知,不同用户具有不同的权限,每个用户是在权限允许的范围内完成不同的任务,linux正是通过这种权限的划分与管理,实现了多用户多任务的运行机制[1]。无论是telnet还是ssh都是为了登陆shell以完成对系统的控制,这些工具使用户与物理机空间实现了分离,同时还允许多人同时控制,是一个非常棒的发明。

三、SSH的历史

Secure Shell(SSH) 是由 IETF(The Internet Engineering Task Force) 制定的建立在应用层基础上的安全网络协议。它是专为远程登录会话(甚至可以用Windows远程登录Linux服务器进行文件互传)和其他网络服务提供安全性的协议,可有效弥补网络中的漏洞。通过SSH,可以把所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。目前已经成为Linux系统的标准配置。

SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文主要介绍OpenSSH免费开源实现在Ubuntu中的应用,如果要在Windows中使用SSH,需要使用另一个软件PuTTY[2]。

相对于telnet,SSH更加安全,因为其采用了rsa非对称加密算法,其登陆方法有两种:

  • 账号密码型:服务器被冒充,“中间人攻击”
  • 密钥文件型:著名开源网站Github就是通过配置公玥的方式完成终端登陆的。

一般而言,一台主机既可以作为SSH服务端亦可作为SSH客户端,客户和服务端都有相应的配置文件,根据需要可以进行文件的配置。客户段在\etc\ssh\ssh_config服务端在\etc\ssh\sshd_config,对参数感兴趣的可以点击这里:linux ssh_config和sshd_config配置文件

四、SSH可以做什么?

目前为止,我用到的有:

  • Github远程仓库配置
  • Git服务器搭建
  • 远程调用GUI界面

了解到SSH还可完成以下的事情:

五、SSH配置(ubuntu为例)

ubuntu默认已经安装了ssh客户端,服务端支持需要下载openssh-server:

sudo apt install openssh-server

这里顺带提一下Linux是如何管理一个服务的,ubuntu目前已经使用systemctl完成对服务的启停重启状态查询。

  • systemctl命令:是一个systemd工具,主要负责控制systemd系统和服务管理器。
  • service命令:可以启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。
  • chkconfig命令:是管理系统服务(service)的命令行工具。所谓系统服务(service),就是随系统启动而启动,随系统关闭而关闭的程序。

如配置SSH服务器允许root登陆

vim /etc/ssh/sshd_config

修改PermitRootLoginyes,使用systemctl工具完成服务的重启。

systemctl restart sshd

六、SSH登陆

最简单的方法是通过账号密码登陆:

ssh root@ip

按照提示输入密码即可登陆,像是阿里云服务器也可以用这个方法登陆。这样容易遭受中间人攻击,使用密钥的方法可以避免这种攻击:

在~/.ssh中生成公私钥id_rsa id_rsa.pub

ssh key-gen -t rsa

客户端中的id _rsa需要复制到服务端,以完成身份的自动验证,使用指令ssh-copy-id完成免密且安全登陆:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.235.22

为了简化记忆,ssh别名可以帮助到你:

vim ~/.ssh/config
Host ipc
    HostName 192.168.1.14
    Port 22
    User root
    Identityfile ~/.ssh/id_rsa.pub
    IdentitiesOnly yes

使用方法如下:

ssh ipc

[1] 操作系统-多用户如何理解(Linux)
[2] SSH简介及两种远程登录的方法
[3] SSH 三步解决免密登录

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页