简介
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH 协议族可以用来进行远程控制, 或在计算机之间传送文件。而实现此功能的传统方式,如 telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh 都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。
服务端使用
安装 SSH 服务
yum install openssh-server
启动 SSH 服务
systemctl start(或restart) sshd
设置开机运行 SSH
systemctl enable sshd
服务端 config 文件的常用配置参数
SSH 服务端的配置: /etc/ssh/sshd_config
服务端 config 参数 | 作用 |
Port | sshd 服务端口号(默认是22) |
PermitRootLogin | 是否允许以root用户身份登录(默认是可以) |
PasswordAuthentication | 是否允许密码验证登录(默认是可以) |
PubkeyAuthentication | 是否允许公钥验证登录(默认是可以) |
PermitEmptyPasswords | 是否允许空密码登录(不安全。默认不可以) |
客户端使用
安装
- Windows 客户端:安装 Putty、XShell 或 SecureCRT
- Linux 客户端: yum install openssh-clients
- macOS 客户端︰默认已经安装了 SSH 客户端
通过 config 配置 SHH
- config 是英语 configuration 的缩写,表示“配置”
- config 文件可以配置 SSH,方便批量管理多个 SSH 连接
客户全局 config 文件
SSH 客户端的配置: /etc/ssh/ssh_config
局部 config 文件
- 局部的客户端config文件在用户家目录的.ssh隐藏目录中
~/.ssh/config
- 此文件一般默认是没有创建的,可以手动创建
- 创建完
~/.ssh/config
文件之后 - 一般会把
~/.ssh/config
的权限修改为 600 chmod 600 ~.ssh/config
客户端 config 文件的配置例子
Host hostname HostName 172.20.10.2 Port 22 User root
配置总计
SSH 的 config 文件可以帮助我们配置 SSH,config 文件分为全局的 config 文件和局部的 config 文件
全局的 config 文件会对所有用户生效,请谨慎修改。
SSH 免密码登入
验证方法
1. 基于口令
用账户和密码来验证登录
2. 基于密钥的验证
- 客户机生成密钥对(公钥和私钥),把公钥上传到服务器
- 并与服务器的公钥进行比较
- 这种验证登录的方法更加安全,也被称为“公钥验证登录”
公钥验证登录
第 1 步∶在客户机中生成密钥对(公钥和私钥)
ssh-keygen
(默认使用 RSA 非对称加密算法)- 以上命令等价于
ssh-keygen -t rsa
- 在
~/.ssh/
目录下,会新生成两个文件 - id_rsa.pub :公钥
- id _rsa:私钥
第 2 步∶把客户机的公钥传送到服务器
ssh-copy-id root@172.20.10.2
等价于ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.20.10.2
ssh-copy-id
把客户机的公钥追加到服务器的一个文件- authorized_keys
~/.ssh/authorized_keys
设置 SSH 免密码后仍想使用密码登录
ssh -o PreferredAuthentications=password -oPubkeyAuthentication=no user@host
总结
- 公钥需要传输并储存到远程机器上
- 私钥则存在我们自己的电脑里
- 之后,SSH 连接就不需要输入密码了