SSH简介
SSH是一种以安全的方式提供远程登录的协议,也是目前远程管理linux系统的首选方式。 在此之前,一般用FTP或telnet来进行远程登录,但因为它们以明文的形式在网络中传输账号密码和数据信息,因此不安全。 sshd是基于ssh协议开发的一款远程管理服务程序。想要使用SSH协议来远程管理linux系统,就需要部署sshd服务程序。
实验前的准备:
- 用克隆的方法,准备两台虚拟机。
- 两台虚拟机需设置在同一个网络模式下,比如NAT模式。
- 设置hostname和ip地址。nmtui
- 用ping命令查看是否连接成功
- 用Xshell远程登录。
两个安全验证方法:
- 基于口令的验证--------用账户和密码来验证登录
-
基于密钥的验证--------需在本地生成密钥对,将密钥对中的公钥上传至服务器,用私钥与服务器中的公钥比对。
-
sshd配置说明:/etc/ssh/sshd_config
配置SSH服务器
1.安装OpenSSH服务器:在终端中运行以下命令来安装OpenSSH服务器:
yum install openssh-server
2.配置SSH服务器:编辑SSH服务器的配置文件sshd_config
,可以使用vi或其他文本编辑器打开/etc/ssh/sshd_config
文件:
vi /etc/ssh/sshd_config
3.修改配置文件:
- 如果您希望允许密码登录,请确保以下行处于注释状态(行首添加
#
字符):
#PasswordAuthentication yes
- 如果您只想允许密钥登录,请确保以下行为未注释状态(行首没有
#
字符):
PubkeyAuthentication yes
- (可选)您还可以根据需要进行其他配置,例如更改端口号、禁用root用户登录等。
4.保存并退出配置文件:
在vi中按Esc
键,然后输入:wq
以保存文件并退出。
5.启动SSH服务器:运行以下命令以启动SSH服务器:
systemctl start sshd
6.配置开机自启动:如果您希望SSH服务器在系统启动时自动启动,可以运行以下命令:
systemctl enable sshd
请确保服务器的防火墙允许SSH连接(默认情况下,CentOS 7使用Firewalld),或者您需要手动打开SSH端口。
1.查看Firewalld状态:运行以下命令以检查Firewalld是否正在运行:
systemctl status firewalld
2.打开SSH端口:如果Firewalld正在运行,则需要将SSH端口添加到防火墙规则中。运行以下命令以将SSH端口(默认为22)打开:
firewall-cmd --add-port=22/tcp --permanent
如果您不想使用默认端口22,则需要将新端口添加到防火墙规则中,例如要使用端口2222,则需要运行以下命令:
firewall-cmd --add-port=2222/tcp --permanent
3.重启Firewalld服务:运行以下命令以使更改生效:
systemctl restart firewalld
禁用SSH密码登录,只允许密钥登录,可以按照以下步骤进行配置:
1.用root用户登录到SSH服务器。
2.编辑SSH服务器的配置文件sshd_config
:运行以下命令使用vi或者其他编辑器打开/etc/ssh/sshd_config
文件:
vim /etc/ssh/sshd_config
3.在文件中找到并修改以下行:
- 将
PasswordAuthentication
行的值改为no
:
PasswordAuthentication no
- 确保
PubkeyAuthentication
的值为yes
:
PubkeyAuthentication yes
4.保存并退出配置文件:在vi中按下 Esc
键,然后输入 :wq
保存文件并退出。
5.重新启动SSH服务器:运行以下命令以应用更改:
systemctl restart sshd
如果您希望禁用root用户登录SSH服务器,可以按照以下步骤进行配置:
1.用root用户登录到SSH服务器。
2.编辑SSH服务器的配置文件sshd_config
:运行以下命令使用vi或者其他编辑器打开/etc/ssh/sshd_config
文件:
vi /etc/ssh/sshd_config
3.在文件中找到并修改以下行:
- 将
PermitRootLogin
行的值改为no
:
PermitRootLogin no
4.保存并退出配置文件:在vi中按下 Esc
键,然后输入 :wq
保存文件并退出。
5.重新启动SSH服务器:运行以下命令以应用更改:
systemctl restart sshd
修改配置文件,实现允许指定用户/用户组或者IP登录
允许指定用户进行登录(白名单)
在/etc/ssh/sshd_config 配置文件中设置AllowUsers选项,
在配置文件末尾添加行格式如下(例如允许用户tom通过192.168.8.30登录)。
AllowUsers tom@192.168.8.30
配置了指定用户或者用户组允许登录后,默认拒绝其他所有用户或者用户组。
禁止指定用户登录(黑名单)
在 /etc/ssh/sshd_config 配置文件中设置DenyUsers选项,
在配置文件末尾添加行格式如下(例如禁止用户lily登录)。
DenyUsers lily
上述修改需要重启sshd服务。
CentOS 6系列执行以下命令进行重启:
# service sshd restart
Centos 7/EulerOS系列执行以下命令进行重启:
# systemctl restart sshd
ssh免密钥登录
ssh免密登陆很简单,只需两步:
-
客户端生成公钥、私钥
-
将客户端公钥上传到服务器
1.客户端生成公私钥
本地客户端生成公私钥:(一路回车默认即可)
ssh-keygen
如上命令会在用户根目录下的.ssh文件夹下创建公私钥
cd ~/.ssh
ls
id_rsa (私钥)
id_rsa.pub (公钥)
2.上传公钥到服务器
这里测试用的服务器地址为:192.168.8.20,用户为:root
方式一:执行ssh-copy-id
将客户端公钥上传到服务器:
ssh-copy-id root@192.168.8.20
上面这条命令,就是将公钥写到了服务器上的.ssh/authorized_keys
文件中。可以登录服务器后,查看该文件,可以在文件末尾看到客户端的公钥。因此,我们也可以直接将客户端公钥的内容直接拷贝到服务器上的.ssh/authorized_keys
文件末尾,以实现相同的功能。
方式二:将客户端id_rsa.pub中的内容贴到~/.ssh/authorized_keys 文件末尾
cat ~/.ssh/authorized_keys
3.验证 -- 测试免密登录
客户端通过ssh连接远程服务器,就可以免密登录了。
ssh root@192.168.8.20
当然,你也可以再创建一个alias,让ssh登录更简单:
alias ssh_820='ssh root@192.168.8.20'
此时,执行 ssh_820
命令就可以直接登录到服务器。
远程传输命令scp
scp是基于SSH协议在网络之间安全传输的命令。其格式是
- 上传:“scp [参数] 本地文件 远程账户@远程IP地址:远程目录”
- 下载:“scp [参数] 远程账户@远程IP地址:远程目录 本地目录”
scp将所有传输数据都进行加密处理
要以绝对路径的形式官写清楚文件的存放位置
如果是传整个文件,则额外添加参数-r进行递归操作。
免密登录:scp ~/.ssh/id_rsa.pub 192.168.10.1:/root/.ssh/authorized_keys
scp命令将本机文件发送到其他主机
echo "Welcome to zuolaoshi.cn" > readme.txt
scp /root/readme.txt 192.168.8.20:/home
# root@192.168.8.20's password:此处输入远程服务器中root管理员的密码
readme.txt 100% 26 0.0KB/s 00:00
scp命令把远程主机上的文件下载到本地主机
scp 192.168.8.20:/etc/redhat-release /root
# root@192.168.8.20's password:此处输入远程服务器中root管理员的密码
redhat-release 100% 52 0.1KB/s 00:00
cat redhat-release