openssh服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行“systemctl status sshd.service”即可按默认配置启动sshd服务,包括root在内的大部份用户(只要拥有合法的登录shell)都可以远程登录系统。
sshd服务的配置文件是:/etc/ssh/sshd_config,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。下面介绍一些最常用的配置项,关于sshd_config文件的更多配置可参考man手册。
修改配置文件前对文件进行备份:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。
[root@localhost ~]# vim /etc/ssh/sshd_config
Port 22 //监听端口为22
ListenAddress 192.168.10.1 //监听地址为192.168.10.1
....... //省略内容
UseDNS no //禁用DNS反射解析
...... //省略内容
[root@localhost ~]# systemctl restart sshd
sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登录,进入安全shell环境后,根据实际需要使用su命令切换为root用户。关于sshd服务的用户登录控制,通常就禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重次数,若超过限制后仍未登录则断开连接。
[root@localhost ~]# vim /etc/ssh/sshd_config
LoginGraceTime 2m //登录验证时间 默认为2分钟
PermitRootLogin no //禁止root用户登录
MaxAuthTries 3 //最大重试次数 默认为6次
MaxSessions 10 //最大连接数
PermitEmptyPasswords no //禁止空密码用户登录
..... //省略内容
[root@localhost ~]# systemctl restart sshd
如果只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法类似(不能同时使用)。
举例: 只允许stu1和stu2用户登录,其中stu2用户仅能从IP地址为 192.168.10.100的主机远程登录,配置如下:
[root@localhost ~]# vim /etc/ssh/sshd_config
..... //省略内容
AllowUsers stu1 stu2@192.168.10.100 //多个用户用空格隔开
[root@localhost ~]# systemctl restart sshd
对于服务器的管理,除了用户帐号的安全控制外,登录验证试也非常重要。sshd服务支持两种验证方式:密码验证和密钥对验证,可以设置只使用其中一种,也可以两种都用。
以服务器中本地系统用户的登录名称、密码进行验证。从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力较弱。
要求提供相匹配的密钥信息才能通过验证。通常先在客户中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大增强了远程管理的安全性。公钥(Public Key)与私钥(Privtae Key)的关系如下:
公钥与私钥是成对生成,这两个密钥互不相同,可以互相加密与解密。
不能根据一个密钥来推算出另一个密钥。
公钥对外公开,私钥只有私钥的持有人才知道。
公钥与私钥要配对使用,如果用公钥对数据进行加密,只有用相对就的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
当密码验证与密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用, 只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。
其中,公钥库文件用来保存各客户机上传的公钥文本,以便与客户机本地的私钥文件进行匹配。
[root@localhost ~]# vim /etc/ssh/sshd_config
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys //指定公钥库数据文件
..... //省略内容
[root@localhost ~]# systemctl restart sshd
举例: 只允许stu1和stu2用户登录,其中stu2用户仅能从IP地址为 192.168.10.100的主机远程登录,配置如下:
[root@localhost ~]# vim /etc/ssh/sshd_config
..... //省略内容
AllowUsers stu1 stu2@192.168.10.100 //多个用户用空格隔开
[root@localhost ~]# systemctl restart sshd
在CentOS7系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登录命令,以及scp、sftp远程复制和文件传输命令等。实际上,任何支持SSH协议的客户端程序都可以与OpenSSH服务器进行通信,如windows平台中的Xshell、SecureCRT、Putty等图形工具。
通过ssh命令可以远程登录sshd服务,为用户提供一个安全的shell环境,以便对服务器进行管理和维护。使用时应指定登录用户、目标主机地址作为参数。
举例:以student用户远程登录到主机192.168.75.158
[root@localhost ~]# ssh student@192.168.75.158
Are you sure you want to continue connecting (yes/no)? yes //接受密钥
student@192.168.75.158's password: //输入密码
当用户第一次登录SSH服务器时,必须接受服务器发来的RSA密钥(根据提示输入“yes”)后才能继续验证。接收的密钥信息将保存到~/.ssh/known_hosts文件中。密码验证成功以后,就登录到目标服务器的命令行环境中了,就好像把客户机的显示器、键盘连接到服务器一样。
如果sshd服务器使用了非默认的端口号(如2345),则在登录时必须通过“-p”选项指定端口号。
举例:以student用户远程登录到主机192.168.75.158的2345端口
[root@localhost ~]#ssh -p 2345 student@192.168.75.158
使用scp命令可以利用SSH安全连接与远程主机相互复制文件。使用scp命令时,除了必须指定复制源、目标外,还应指定目标主机地址、登录用户,执行后提示验证口令即可。
举例:将远程主机的/etc/passwd文件复制到本机,
将本机的/var/log/复制到远程主机。
[root@localhost ~]#scp root@192.168.75.158:/etc/passwd /root/pwd11.txt
[root@localhost ~]#scp -r /var/log root@192.168.75.158:/logbak
通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件 ,采用了与FTP类似的登录过程和交互环境,便于目录资源管理。
举例:使用sftp远程登录,并进行文件上传与下载。
[root@localhost ~]#sftp student@192.168.75.158
MobaXterm是windows下一款功能非常强大的安全终端模拟软件,支持Telnet、SSH、SFTP等协议,可以方便地对Linux主机进行远程管理。
安装并运行MobaXterm后,在Session Settings对话框中指定相关协议,并指定远程主机的IP地址、端口号等相关信息,然后单击OK,根据提示输入密码验证后即可成功登录目标主机。
Linux的IP:192.168.220.130
1)在服务器端创建密钥对,登录者为lying
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa): //指定私钥位置
Enter passphrase (empty for no passphrase): 123456 //设置私钥短语
Enter same passphrase again:123456 //确认所设置的短语
2)修改配置文件root身份:
vim /etc/ssh/sshd_config
PasswordAuthentication yes //启用密码验证
PubkeyAuthentication yes //启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys //指定公钥库数据文件
重启服务以生效配置文件:
systemctl restart sshd
3)查看密钥对确认根文件下是否有.ssh文件
cd ;ls -a
4)进入.ssh文件 将id_rsa.pub改名为authorized_keys以匹配配置文件设置
cd .ssh;mv id_rsa.pub authorized_keys
5)将id_rsa私钥剪贴到客户端中并将.ssh中的私钥文件删除
主文件夹->其他位置->计算机->root
右上角列表->设置为显示隐藏文件
—>.ssh—>将id_rsa拖至X-shell端电脑D:\id_rsa
6)打开X-shell,新建连接,主机为192.168.220.130
6)打开X-shell,新建连接,主机为192.168.220.130
连接:用任意普通用户lying登录,用户密钥为D:\id_rsa,密码为设置的私钥短语qwert——连接成功
[student@localhost log]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/student/.ssh/id_rsa): //指定私钥位置
Enter passphrase (empty for no passphrase): //设置私钥短语
Enter same passphrase again: //确认所设置的短语
公钥文件放在根目录下,私钥文件放在客户端
[student@localhost ~]$ scp ~/.ssh/id_rsa.pub root@192.168.75.158:/
[root@localhost ~]# mkdir -p /home/stu1/.ssh
[root@localhost .ssh]# cat /tmp/id_rsa.pub >> /home/stu1/.ssh/authorized_keys
[root@localhost .ssh]# ll
-rw-r--r--. 1 root root 411 12月 30 22:59 authorized_keys
PasswordAuthentication no 密码验证
PubkeyAuthentication yes 密钥对验证
AuthorizedKeysFile .ssh/authorized_keys
[student@localhost ~]$ssh stu1@192.168.75.158 -i 私钥文件
]
[root@aminglinux ~]# mkdir /root/.ssh //创建目录
[root@aminglinux ~]# chmod 700 /root/.ssh //更改这个目录的权限
[root@aminglinux ~]# vim /root/.ssh/authorized_keys //把公钥内容粘贴到这个文件里并保存。
[root@aminglinux ~]# setenforce 0 //暂时关闭SELinux,下次重启还会再开启。
查看selinux安全机制:
getenforce
Enforcing(1)保护
Permissive(0)关闭
sshd_config
(位于 /etc/ssh/
)