简单介绍 ssh 的使用方法及其基本原理
写在前面
最近一段时间的工作偏运维开发,负责搭建一些基础服务(比如 k8s )等。面对着一堆的机器,如何才是正确的登录姿势呢?怎么样才是正确的管理姿势呢?我抽时间请教了一下我们组的高级运维开发们,听到了很多大学时接触到的概念,比如 Ansible、 LVM 、iptables、自动化脚本、批量任务等等。作为一个好学少年,自然要加班加点地学习。 本博文就 Ansible 使用的一个前提——ssh登录服务器为切入点,讲一讲 ssh 登录服务器的两种方式。
适用人群
入门√——初级——中级——高级;本文适应入门及以上。
ssh登录服务器的两种方式
如果是一个比较喜欢折腾的人,在某个云平台购买了一台云主机,除了通过云平台提供的web页面上的命令行工具,其实也可以在本地电脑上面通过 ssh 进行登录。具体地又可以分成两种:1)ssh 用户名密码登录,2)ssh 证书(免密码)登录。需要说明一下,后者的安全性高于前者,因此一般会默认不启用第一种登录方式,只允许第二种登录方式。
ssh工具
SSH 为 Secure Shell 的缩写,是建立在应用层基础上的安全协议,利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。ssh 分成服务端与客户端,其中服务端运行在被登录的机器上面,客户端运行在操作的机器上面。
在 ubuntu 中,可以通过下面的命令安装ssh的服务端与客户端
# 安装服务端
sudo apt-get install openssh-server
# 一般安装完成后sshd服务会默认启动
# 可以通过下面的命令启动(重新启动)
service ssh restart
# 安装客户端
sudo apt-get install openssh-client
用户名密码登录
从我测试得到的结果来看,在本地 docker 中运行的 ubuntu 容器中安装的 openssh-server 默认允许用户名登录,但是不排除为了安全考虑云上的服务器上禁止开启 ssh 的这种登录方式,毕竟用户名加密码的方式很容易被爆力破解。
如果大家理解其中的厉害关系,可以检查修改 /etc/ssh/sshd_config
(sshd的配置文件)中 PasswordAuthentication
这一项配置为 yes
(一般默认是 yes )。修改完配置重启sshd
服务就可以使用用户名和密码登录了。
# -l 指定用户名为 jingwei
# -p 指定端口为 6004,默认为 22
# 输入下面的命令后根据提示输入密码就可以登录到对应的服务器了
ssh -l jingwei -p 6004 0.0.0.0
ssh免密登录
所谓免密登录,也就是说不需要人工再输入用户名和密码了,但这并不意味着没有了鉴权的动作,服务器毕竟是自己的,不能随便允许别人登录到上面去搞破坏。ssh 免密登录通过证书进行鉴权。
这里的证书分为公钥与私钥,我们可以简单地理解为:公钥=锁;私钥=钥匙。
流程基本是这样的:如果我们想要从 A 免密登录到 B,就需要把公钥(锁)放到 B 的特定位置,而 A 拥有私钥(钥匙)的完整副本。当 A 拿着私钥去访问 B 的时候,B 发现自己身上有一把锁(B 可能有很多公钥)可以被 A 的私钥打开,于是给 A 放行,A就成功登录到 B 了。
如何得到证书(公钥与私钥)
上面提到的证书可以通过两种方式获取得到。第一种是向服务器管理员索取,一般索取得到的是私钥,这样就可以免密登录到任何存放了公钥的服务器了。第二种是自己生成证书(比如使用ssh-keygen
),然后把公钥放到对应的服务器的特定位置,就可以免密登录到对应的服务器了。
# 通过 ssh-keygen 可以生成需要的证书
# 根据提示一路按 RETURN(ENTER) 即可
# 默认情况下会生成 id_rsa 和 id_rsa.pub
# id_rsa 为私钥,id_rsa.pub 为公钥
ssh-keygen
公钥放置位置
linux系统允许多用户登录同一台服务器,一般情况下 /home
目录会有非常多的用户目录。可以把公钥放置在任何一个用户目录的$HOME/.ssh/authorized_keys
文件中,比如 cat id_rsa.pub >> /home/jingwei/.ssh/authorized_keys
,这样就可以使用私钥以 jingwei
的名义登录对应的服务器了。
免密登录
在使用 ssh 的时候,还有一些“常识”,如下:
# -i 指定私钥,默认条件下使用 ~/.ssh/id_rsa
# -l 指定用户名
# -p 指定端口,默认为 22
ssh -i ~/.ssh/id_rsa -p 6004 -l jingwei 0.0.0.0
# 上面的命令等同于
ssh -p 6004 jingwei@0.0.0.0
小结
本文简单介绍了 ssh 的使用方法及其基本原理,尤其通俗易懂地介绍了 ssh 免密登录的基本原理。
参考
- 新手上路 — 国内最专业的Ansible中文官方学习手册 如题,讲的真的很专业
- Linux LVM硬盘管理及LVM扩容 仅供参考
- iptables详解:图文并茂理解iptables 推荐这个iptables系列文章
- Linux系统(Ubuntu16.04)ssh配置无密码登录 ssh免密登录的博文
- Ubuntu使用ssh公钥实现免密码登录 另一篇ssh免密登录的博文
- ssh(安全外壳协议)_百度百科 介绍了ssh的定义