一、SSH简介
SSH 为 Secure Shell 的缩写,SSH 是建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。
SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。
- 服务端是一个守护进程(daemon),他在后台运行并响应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接。
- 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。客户端适用于多种平台。——以上摘自百度百科
二、安装SSH服务
在centos中登录root账号,使用命令rpm -qa | grep openssh
或yum list installed | grep openssh
检查是否安装相应软件
可以看到已经安装过了,在此为了演示安装,故先将其卸载,使用命令
yum -y remove openssh openssh-server
从上图可知,已经卸载完毕了
重新运行命令yum -y install openssh openssh-server
安装openssh和openssh-server软件
由上图可知,已安装成功
三、配置SSH
编辑文件,输入命令vi /etc/shh/sshd_config
打开文件后,输入/
加上要查找的关键字
,按下回车键
就可以对文件内容进行查找了
如要查找Port则输入/Port
,如下图:
然后按字母'n'
进行向下查找 ,按字母'N'
进行向上查找
对Port进行设置
查找到Port所在位置后,输入字母'i'
对文件进行编辑,可将默认端口号22改为大于1023的任意端口号(因0-1023的端口号都是属于系统端口,尽量不要使用,免得与系统的某些服务冲突而导致服务无法正常运行),若是不更改则默认使用22端口
对AllowUsers进行设置
先使用命令cat /etc/passwd | grep -v /sbin/nologin
查看可以登录系统的用户名有哪些
从上图可知都是系统用户,故需新建个新用户供SSH登录使用
1、新增用户
使用命令adduser + 用户名
2、设置新用户口令
使用命令passwd + 用户名
3、对新用户进行sudo授权
因个人创建的用户只能在各自的home目录下有完整的权限,其他目录均需要通过授权或使用root用户查看,而设置sudo权限则可以达到root用户的效果
①首先查找sudo所在文件,使用命令whereis sudoers
②查看root对该文件的权限,使用命令ls -l /etc/sudoers
从上图可知,root用户对该文件也只具有读权限没有写权限
③给root用户添加该目录的写权限,使用命令chmod -v u+w /etc/sudoers
④编辑sudoers文件,使用命令vi /etc/sudoer
搜索Allow
如上图所示,追加上新增用户用户名 ALL=(ALL) PASSWD:ALL
(若要使用sudo的时候不需要输入密码,则输入用户名 ALL=(ALL) NOPASSWD:ALL
),然后保存退出即可
⑤编辑文件后,需要将该文件的写权限进行回收,使用命令chmod -v u-w /etc/sudoers
查找到AllowUsers所在位置后,可修改后面的账号,从而设置仅允许某些用户账号可以使用SSH进行登录
设置是否允许root用户使用SSH登陆系统
因每一台linux都有个超级管理员用户root,故最好在SSH里面禁用掉使用root用户登录以保证系统的安全
在文件中搜索PermitRootLogin
,设置不允许使用root登录:PermitRootLogin no
(默认是yes
)
保存后启动SSH服务
使用命令systemctl start sshd.service
启动ssh服务,结果报错
该问题的原因是SSH Port已经被修改了,但没有写进SELinux的设置中,故使用命令semanage port -a -t ssh_port_t -p tcp 在文件中设置的端口号
,提示semanage:command not found
说明尚未安装相应的软件,使用命令
yum whatprovides /usr/sbin/semanage
查看需要安装的软件包
接着使用命令
yum install policycoreutils-python -y
安装相应的软件
由上图可知,已安装成功,再次执行命令
semanage port -a -t ssh_port_t -p tcp 在文件中设置的端口号
已执行成功了,使用命令semanage port -l | grep ssh
检查是否已经端口号添加成功(若是SSH默认端口未曾更改,则执行该命令只会显示默认端口号22)
由图可知,相应端口号已添加成功了
接着使用命令firewall-cmd --permanent --zone=public --add-port=端口号/tcp
设置防火墙允许该端口使用SSH登陆至服务器(若要设置只允许本机或某个网段通过指定的端口号才能通过SSH登陆系统,则使用命令firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="网络IP地址" port port="端口号" protocol="tcp" accept' --permanent
)
重新载入防火墙设置,使用命令firewall-cmd --reload
启动SSH服务,使用命令
systemctl start sshd.service
并使用命令systemctl status sshd.service
查看SSH服务的当前状态
测试
使用命令ssh -p 端口号 登陆账号@IP地址或主机名称
,结果提示ssh:command not found
说明没有安装相应的软件包,使用命令
yum -y install openssh-clients
再次执行命令
ssh -p 端口号 登陆账号@IP地址或主机名称
从上图可知,可以正常连接到SSH服务器了,执行sudo命令查看是否已可以正常使用
输入命令exit
则可退出连接
也可以在Windows安装SSH客户端进行连接测试
以上,已完成了SSH服务器的安装与配置连接
四、连接后出现中文乱码的解决方法
如果在Windows上面使用SSH客户端连接到linux服务器后出现中文乱码,则在linux服务器上面编辑/etc/locale.conf文件,使用命令vi /etc/locale.conf
在其中加入LANG="zh_CN.gbk"
语句保存退出即可
再次连接时已可以正常显示中文了
五、连接时容易掉线的解决方法
编辑文件,输入命令vi /etc/shh/sshd_config
打开文件后,输入“/Client”
查找下面两行代码
ClientAliveInterval 0 --即时发送数据
ClientAliveCountMax 3 --3秒没有响应断开连接
这两行代码的意思是:
1、客户端每隔多少秒向服务发送一个数据
2、客户端多少秒没有响应,服务器自动断开连接
将这两行代码更改为:
ClientAliveInterval 30 --每隔30s发送数据
ClientAliveCountMax 86400 --发送最大次数后没有响应则断开连接
输入命令:wq
保存文件后,使用命令systemctl start sshd.service
重启sshd服务