0715_Linux基础(10)

199 阅读3分钟

SSH 概念

百度百科里有如下解释: SSH 为 Secure Shell 的缩写,SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现,使用的很广。

最简单的使用方式,是通过用户名和密码的方式进行连接。


# 当前本机用户名为 uer01, 去连接远程用户
# 会默认认为远程端,也有一个同名的 uesr01 用户
# 会提示输入密码

ssh 172.0.10.23 


# 通过其他用户名进行连接

ssh user02@172.0.10.23

# 如果做一些配置,比如域名或系统名一类的相关配置,可以直接输入域名

ssh  user02@www.baidu.com 

ssh user02@serveraaaa


基于 SSH 密钥的身份验证

每次都去使用用户名和密码去连接远程服务器,既麻烦,又降低安全性。因此,我们一般会采用 SSH 密钥的身份验证方式去连接。

假设有两台机器,一台为 本机 a, 另一台为远程机 b,我想要在 a 机器上,通过 ssh 密钥的身份认证方式,去远程连接远程机 b,那么需要做如下操作。

# 本机 a 生成 ssh 密钥
# 会提示 输入 passphrase (可置空,稍后也会更详细说明)
# 默认是在当前用户的主目录下生成 `id_rsa` (私钥), `id_rsa.pub` (公钥)
ssh-keygen

# 如果想要生成其他的用户名,可以使用 -f 参数 ssh-keygen -f ~/.ssh/key-with-other



# 将公钥传输到远程机 b 上面去
# 这个文件内容将会写入 远程机 b 的 authorized_keys 文件中
ssh-copy-id -i ~/.ssh/id_rsa.pub


# 进行认证,即可
# 第一次,会比较麻烦,会把远程机 b 的 公钥副本,下入到 本地机 a 的  ~/.ssh/known_host 文件中,方便之后的访问

ssh user01@172.0.10.30

还记得上面有提示的 passpharase (密语) 吗? 默认情况我们是将它置空的(因为更方便),如果不置空的话,再每次 ssh 连接的时候,还会需要我们输入 passpharase 二次校验。

当然,如果设置了密语,我们也可以通过 ssh-agent 命令把密语放在内存之中,从而去降低输入 密语的次数,并且注销了启动 ssh-agent 的会话,那么密语也将从内存中消失。


# 输入密语
eval $(ssh-agent)

# 加入 ssh
ssh-add

1.png

2.png

3.png

4.png

自定义 OPENSSH 的服务配置

OpenSSH 服务由 sshd 的守护进程进行提供,它的核心配置文件为 /etc/ssh/ssh_config

如果需要进行一些更改来增强系统的安全性,那么有两种常见的方式: 1. 紧张远程登录 root 用户,2. 禁止使用基于密码的身份验证。

# vim /etc/ssh/sshd_config

# 禁止直接使用root用户登录
#但是可以允许其他用户登录账户,进行 root 用户的切换,除非 Linux 系统本身进行了 root 用户方面的限制。

PermitRootLogin no

# 禁止账号密码的
PasswordAuthentication no

其他参考文档

  1. ssh安全外壳协
  2. OpenSSH
  3. ssh-copy-id 命令详解