文章目录OpenSSH服务管理OpenSSH 服务介绍SSH 介绍SSH 建立连接的过程加密类型双向加密过程使用 ssh 访问远端CLIssh工具配置文件配置ssh密钥认证配置过程以非交互方式产生密钥对排故加固SSH服务配置文件1.禁止root密码登录2.禁止root登录3.禁止密码登录4.只允许特定用户登录OpenSSH服务管理OpenSSH 服务介绍SSH 介绍SSH 全称是Secure ShellSSH协议是基于应用层的协议为远程登录会话和其他网络服务提供安全性的协议。实现此功能的传统方式如 telnet (终端仿真协议)、 rcp、ftp、 rlogin、rsh都是极为不安全的并且会使用明文传送密码。OpenSSH 提供了服务端后台程序和客户端工具用来加密远程控件和文件传输过程中的数据并由此来代替原来的类似服务。SSH 建立连接的过程主要分为下面几个阶段SSH协议版本协商阶段SSH目前包括SSH1和SSH2两个大版本。密钥和算法协商阶段SSH支持多种加密算法双方根据自己和对端支持的算法进行协商最终决定要使用的算法。认证阶段服务器和客户端互相进行身份验证。会话请求阶段客户端会向服务器端发送会话请求。会话请求分为这样几类申请对数据传送进行压缩、申请伪终端、启动 X11、TCP/IP 端口转发、启动认证代理等。交互会话阶段会话请求通过后服务器端和客户端进行信息的交互。例如运行 shell、执行命令、传递文件。加密类型对称加密加密和解密都使用一个钥匙。确保数据的完整性、速度快。非对称加密一对钥匙。公钥用来加密数据。私钥用来解密数据。确保数据的安全性。双向加密过程SSH协议是基于非对称加密方法的服务器和客户端都会生成自己的公钥和私钥。公钥用来加密数据。私钥用来解密数据。双向加密过程服务器创建密钥对。远程服务器会在/etc/ssh目录下生成一个名为多个密钥对例如ecdsa类型的密钥对ssh_host_ecdsa_key.pub 公钥和 ssh_host_ecdsa_key 私钥。之后每回启动sshd服务的时候系统会自动在此路径下查找公钥。客户端请求连接。服务器接到请求后把公钥传给客户端使用。客户端记录服务器公钥并计算自己的公私钥。客户端将服务器传来的公钥记录在**~/.ssh/known_hosts** 中若是已经记录有该服务器公钥则比对是否一致一致后就计算客户端自己的公私钥。客户端使用服务器的公钥加密自己的公钥并发送给服务器。服务器端拥有客户端公钥自己私钥客户端拥有服务器公钥自己私钥组成了非对称加密系统。双向加解密。服务器发送数据用客户端公钥加密客户端收到数据后用自己私钥解密。客户端发送数据用服务器公钥加密服务器收到数据后用自己私钥解密。使用 ssh 访问远端CLIssh工具演示只指定ip或主机名额外指定用户名额外指定命令# 通过IP地址[ljwclient ~10:25:27]$ssh10.1.8.10# 通过主机名称[ljwclient ~10:33:50]$sshserver# 指定root用户登录[ljwclient ~10:33:57]$sshrootserver# 同时指定用户和命令[ljwclient ~10:34:12]$sshrootserverhostnameserver.ljw.cloud[ljwclient ~10:41:36]$sshrootserverhostname;idserver.ljw.clouduid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023ssh工具配置文件~/.ssh/config用户自己的配置优先级高于全局配置。文件权限不得高于644。/etc/ssh/ssh_config全局配置应用于所有用户。示例#如果~/.ssh目录不存在创建该目录[rootserver ~17:05:09]# mkdir -m 700 .ssh#修改vim[rootserver ~17:11:59]# vim ~/.ssh.configHost * StrictHostKeyChecking no User root PreferredAuthentications password#清空其他主机秘钥[rootserver ~17:12:47]# .ssh/known_hosts# 再次登录不会提示主机key是否校验验证用户也是root[ljwclient ~17:09:07]$sshserver Warning: Permanently addedserver,10.1.8.10(ECDSA)to the list of known hosts. rootservers password:参数说明Host*匹配所有目标服务器。StrictHostKeyChecking no连接目标服务器不校验主机key直接接受。User root连接目标服务器默认使用laoma账户。PreferredAuthentications password连接目标服务器使用密码认证。配置文件权限建议设置为只能用户自己读写。[ljwserver ~17:15:04]$chmod600.ssh/config[ljwserver ~17:16:02]$sshserver rootservers password:配置ssh密钥认证使用密钥登录避免输入密码更安全配置过程#客户端生成密钥对[ljwserver ~18:00:52]$ ssh-keygen# 私钥保存位置Enterfileinwhichto save the key(/home/laoma/.ssh/id_rsa):回车# 私钥加密密码回车表示不加密Enter passphrase(emptyforno passphrase):回车# 再次回车Enter same passphrase again:回车Your identification has been savedin/home/laoma/.ssh/id_rsa. Your public key has been savedin/home/laoma/.ssh/id_rsa.pub. The key fingerprint is: SHA256:OAfLyL6KIXr44DV7vhpystqqXwsbFl2tGP6HZP4GLR4 laomaserver.laoma.cloud The keys randomart image is: ---[RSA2048]----|.oB...||..B o ||o ooB o||.o||. S. o||o...||.o||oE.o||o...|----[SHA256]-----#查看生成的文件[ljwserver ~18:43:45]$ls.ssh/ config id_rsa id_rsa.pub known_hosts# 将公钥推动给目标服务器上的目标用户[ljwserver ~18:44:19]$ ssh-copy-id ljwserver#验证[ljwserver ~18:45:35]$sshljwserverhostnameserver.ljw.cloud# 推送公钥相当于# 将公钥内容保存到目标服务器上目标用户家目录下.ssh/authorized_keys[ljwclient ~15:23:50]$cat.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnr5CRURyEm5SzBP2eViDJvK2PUVSOIQLK4SF1CDcFDFZ3m3C7NMDo0zCO08aD7qAgM368TgTz5yntby4ELyluywOEC78B6zZljIer87t51fxFZedZWPTRRZgv7TPFk1yI1D3J/xh8LTlegwswZdz3Rc4/D12r4N7fbRtZkid4nXW6w5bx7ZxoDZLYUMMVStEsGtRfI519vb1h5wMFK3DenZUrl2KFBj3KF7QoiFsSwxLsoivuKoVlrqsY7FYxh65vfUVq/3PpUXsRYhkj2xboCKS6RwYfWHyy55mQ8AHUizOv3mw/ir66kjkYFMKfbqyq3QSDJX2jIZtd ljwclient.ljw.cloud#在server端查看[rootserver ~17:28:36]# cat .ssh/authorized_keysssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDnr5CRURyEm5SzBP2eViDJvK2PUVSOIQLK4SF1CDcFDFZ3m3C7NMDo0zCO08aD7qAgM368TgTz5yntby4ELyluywOEC78B6zZljIer87t51fxFZedZWPTRRZgv7TPFk1yI1D3J/xh8LTlegwswZdz3Rc4/D12r4N7fbRtZkid4nXW6w5bx7ZxoDZLYUMMVStEsGtRfI519vb1h5wMFK3DenZUrl2KFBj3KF7QoiFsSwxLsoivuKoVlrqsY7FYxh65vfUVq/3PpUXsRYhkj2xboCKS6RwYfWHyy55mQ8AHUizOv3mw/ir66kjkYFMKfbqyq3QSDJX2jIZtd ljwclient.ljw.cloud#推给目标主机root用户[rootserver ~18:49:23]# mkdir -m 700 .ssh[rootserver ~18:49:55]# cp ~ljw/.ssh/authorized_keys .ssh#客户端验证[ljwserver ~18:47:34]$sshrootserverhostnameserver.ljw.cloud以非交互方式产生密钥对[ljwclient ~19:01:45]$ ssh-keygen-trsa-N-fid_rsa_new[ljwclient ~19:03:24]$ls*new* id_rsa_new id_rsa_new.pub其他选项#-i 指定私钥位置[ljwclient ~19:04:32]$mv.ssh/id_rsa /tmp[ljwclient ~19:04:36]$ssh-i/tmp/id_rsa rootserverhostnameserver.laoma.cloud#如果找不到密钥则使用密码登录# -p 选项指定目标服务器 sshd 服务端口号默认22[ljwclient ~19:05:27]$ssh-lroot-p1022serverhostnamerootservers password: server.ljw.cloud排故故障配置密钥登录后远程登录仍要需要输入密码验证。# 将目标主机上目标用户的家目录的权限改为777。[rootserver ~19:06:45]# chmod 777 /root#查看日志[rootserver ~19:06:48]# tail -f /var/log/secure......Jul3119:04:41 server sshd[3693]: Authentication refused: bad ownership or modesfordirectory /root......#发现提示文件权限有问题#查找文件权限[rootserver ~19:07:54]# ls -ld /rootdrwxrwxrwx.14root root40967月2318:58 /root#更改权限[rootserver ~19:11:01]# chmod 550 /root加固SSH服务客户端工具修改完配置文件后下次执行客户端工具立刻生效。ssh 工具 /etc/ssh/ssh_config或者~/.ssh/config服务器修改完配置文件后服务程序一直在运行systemctl reload/restart sshd配置文件sshd服务配置文件/etc/ssh/sshd_config常见配置PermitRootLogin prohibit-password禁止root用户通过密码登录。PermitRootLogin no禁止 root 用户登录。root用户权限不受限制。root用户存在每个linux系统只需要猜密码就可以。从审计角度来看很难跟踪哪个授权用户以root身份登录并进行了更改。 如果用户必须以普通用户身份登录并切换到root帐户则会生成一个日志事件可用于帮助提供问责制。PasswordAuthentication no禁止用户使用密码登录。AllowUsers exampleuser允许特定用户登录该用户可以提权为root。UseDNS no客户端连接服务器的时候服务器不需要反向解析服务端IP地址提高连接速度。1.禁止root密码登录#提前配置好root秘钥登录[rootserver ~19:13:49]# vim /etc/ssh/sshd_config#添加一行#PermitRootLogin yesPermitRootLogin prohibit-password#重启服务[rootserver ~19:14:40]# systemctl reload sshd#连接测试即使密码正确也无法远程登录[ljwclient ~19:15:18]$ rootserver rootservers password: Permission denied, please try again. rootservers password: Permission denied, please try again.#如果配置了秘钥登录则需要使用选项强制密码认证[ljwclient ~19:15:56]$ssh-oPreferredAuthenticationspassword rootserver2.禁止root登录[rootserver ~19:16:32]# vim /etc/ssh/sshd_config# 添加一行#PermitRootLogin yesPermitRootLogin no#重启服务[rootserver ~19:17:06]# systemctl reload sshd#连接测试即使配置了免密登录也无法远程登录[ljwclient ~19:17:50]$sshrootserver rootservers password: Permission denied, please try again. rootservers password: Permission denied, please try again.#但是可以使用普通用户登录然后提权为root用户[ljwclient ~19:18:29]$sshljwserver[ljwserver ~19:18:48]$su-[rootserver ~19:19:04]#3.禁止密码登录[rootserver ~19:19:38]# vim /etc/ssh/sshd_config# 注释原有行#PasswordAuthentication yes# 添加新行设置为noPasswordAuthentication no#重启服务[rootserver ~19:20:00]# systemctl reload sshd#连接测试支持秘钥登录[ljwclient ~19:20:59]$sshljwserver Last login: Thu Jul2318:53:302026from10.1.8.14.只允许特定用户登录[rootserver ~19:23:25]# useradd laowang[rootserver ~19:23:47]# echo 123 | passwd --stdin laowang[rootserver ~19:23:51]# mkdir -m 700 /home/laowang/.ssh/[rootserver ~19:23:59]# cp .ssh/authorized_keys /home/laowang/.ssh/[rootserver ~19:24:06]# chown -R laowang:laowang /home/laowang/.ssh/#配置sshd服务[rootserver ~19:24:33]# vim /etc/ssh/sshd_config# 最后添加一行AllowUsers ljw# 重启服务[rootserver ~19:24:47]# systemctl reload sshd#测试连接laowang用户不管通过什么方式都不可以登录[ljwclient ~19:26:35]$sshlaowangserverhostnamePermission denied(publickey,gssapi-keyex,gssapi-with-mic).