Linux_服务管理—openssh

Serafina ·
更新时间:2024-09-22
· 952 次阅读

openssh1. 使用 SSH 访问远程命令行1.1 OpenSSH 简介1.2 SSH 版本1.3 SSH 认证方式1.4 OpenSSH 的工作模式1.5 Secure Shell 示例1.6 SSH 主机密钥2. 配置基于 SSH 密钥的身份验证3. 自定义 SHH 服务配置4. SSH 安全注意事项 1. 使用 SSH 访问远程命令行 1.1 OpenSSH 简介

OpenSSH 这一术语指系统中使用的 Secure Shell 软件的软件实施。 用于在远程系统上安全运行 Shell 。 如果您在可提供 SSH 服务的远程 Linux 系统中拥有用户账户, 则 SHH 是通常用来远程登陆到该系统的命令。 SSH 命令也可用于在远程系统中运行命令。


常见的远程登陆工具有:

telnet ssh dropbear telnet //远程登陆协议 , 23/TCP 认证明文 数据传输明文 ssh //Secure SHell , 应用层协议 , 22/TCP 通信过程及认证过程是加密的 , 主机认证 用户认证过程加密 数据传输过程加密 dropbear //嵌入式系统专用的SSH服务器端和客户端工具 1.2 SSH 版本

openssh 有两个版本 , 分别为 v1 和 v2 , 其特点如下:

v1:基于CRC-32做MAC , 无法防范中间人(man-in-middle)攻击 v2:双方主机协议选择安全的MAC方式 。 基于DH算法做密钥交换 , 基于RSA或DSA算法实现身份认证 1.3 SSH 认证方式

openssh 有两种认证方式 , 分别是:

基于口令认证 基于密钥认证 1.4 OpenSSH 的工作模式

openssh 是基于C/S(Client/Server)架构工作的 。

服务器端 //sshd , 配置文件在/etc/ssh/sshd_config 客户端 //ssh , 配置文件在/etc/ssh/ssh_config ssh-keygen //密钥生成器 ssh-copy-id //将公钥传输至远程服务器 scp //跨主机安全复制工具 1.5 Secure Shell 示例 //以当前用户身份创建远程交互式shell,然后在结束时使用exit命令返回到之前的shell [root@zhang ~]# ssh 192.168.25.151 root@192.168.25.151's password: Last login: Mon Apr 27 15:36:48 2020 from 192.168.25.150 [root@z ~]# exit logout Connection to 192.168.25.151 closed. //以其他用户身份(remoteuser)在选定主机(remotehost)上连接到远程shell [root@zhang ~]# ssh jerry@192.168.25.151 jerry@192.168.25.151's password: Last login: Mon Apr 27 16:33:48 2020 from 192.168.25.150 [jerry@z ~]$ exit logout Connection to 192.168.25.151 closed. //以远程用户身份(remoteuser)在远程主机(remotehost)上通过将输出返回到本地显示器的方式来执行单一命令 [root@zhang ~]# ip a s ens32 2: ens32: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:33:80:f1 brd ff:ff:ff:ff:ff:ff inet 192.168.25.150/24 brd 192.168.25.255 scope global ens32 valid_lft forever preferred_lft forever [root@zhang ~]# ssh jerry@192.168.25.151 '/usr/sbin/ip a s ens32' jerry@192.168.25.151's password: 2: ens32: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:a8:ce:a1 brd ff:ff:ff:ff:ff:ff inet 192.168.25.151/24 brd 192.168.25.255 scope global ens32 valid_lft forever preferred_lft forever [root@zhang ~]# ssh jerry@192.168.25.151 'touch abc' jerry@192.168.25.151's password: Permission denied, please try again. jerry@192.168.25.151's password: [root@zhang ~]# ssh jerry@192.168.25.151 jerry@192.168.25.151's password: Last failed login: Mon Apr 27 17:06:24 CST 2020 from 192.168.25.150 on ssh:notty There was 1 failed login attempt since the last successful login. Last login: Mon Apr 27 17:04:40 2020 [jerry@z ~]$ ls abc [root@zhang ~]# ssh jerry@192.168.25.151 'echo "hello world" > /tmp/hehe' jerry@192.168.25.151's password: [jerry@z ~]$ ls /tmp/ hehe [jerry@z ~]$ cat /tmp/hehe hello world //w命令可以显示当前登录到计算机的用户列表。这对于显示哪些用户使用ssh从哪些远程位置进行了登录以及执行了何种操作等内容特别有用 [root@zhang ~]# w 17:18:44 up 12 days, 14:33, 3 users, load average: 0.00, 0.01, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty1 31Mar20 3:21m 0.05s 0.05s -bash root pts/0 192.168.25.1 15:38 1:08m 0.01s 0.01s -bash root pts/1 192.168.25.1 15:16 4.00s 0.14s 0.05s w 1.6 SSH 主机密钥

ssh 通过公钥加密的方式保持通信安全 。 当某一 ssh 客户端连接到 ssh 服务器时 , 在该客户端登陆之前 , 服务器会向其发送公钥副本 。 这可用于为通信渠道设置安全加密 , 并可验证客户端的服务器 。

当用户第一次使用 ssh 连接到特定服务器时,ssh 命令可在用户的 ~/.ssh/known_hosts 文件中存储该服务器的公钥 。 在此之后每当用户进行连接时 , 客户端都会通过对比 ~/.ssh/known_hosts 文件中的服务器条目和服务器发送的公钥 , 确保从服务器获得相同的公钥 。 如果公钥不匹配 , 客户端会假定网络通信已遭劫持或服务器已被入侵 , 并且中断连接 。

这意味着 , 如果服务器的公钥发生更改(由于硬盘出现故障导致公钥丢失 , 或者出于某些正当理由替换公钥) , 用户则需要更新其 ~/.ssh/known_hosts 文件并删除旧的条目才能够进行登陆 。

//主机ID存储在本地客户端系统上的 ~/.ssh/known_hosts 中 [root@zhang ~]# cat ~/.ssh/known_hosts 192.168.25.151 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGJGxpOYuk2Fjz4HbLP9ztwzBxfPEFgKCi6j7c9WPR5nQUN2KyOYuo6hgleXsJMFLXc8C4feVKAPl4E8LT+y2RY= //主机密钥存储在SSH服务器上的 /etc/ssh/ssh_host_key* 中 [root@z ~]# ls /etc/ssh/*key* /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ecdsa_key.pub /etc/ssh/ssh_host_ed25519_key /etc/ssh/ssh_host_ed25519_key.pub /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_rsa_key.pub 2. 配置基于 SSH 密钥的身份验证

用户可通过使用公钥身份验证进行 ssh 登录身份验证 。 ssh 允许用户使用私钥-公钥方案进行身份验证。这意味着将生成私钥和公钥这两个密钥。私钥文件用作身份验证凭据,像密码一样,必须妥善保管。公钥复制到用户希望登录的系统,用于验证私钥。公钥并不需要保密。拥有公钥的 ssh 服务器可以发布仅持有您私钥的系统才可解答的问题。因此,可以根据所持有的密钥进行验证。如此一来,就不必在每次访问系统时键入密码,但安全性仍能得到保证。

使用 ssh-keygen 命令生成密码 , 将会生成私钥 ~/.ssh/id_rsa 和公钥 ~/.ssh/id_rsa.pub

注意:

生成密钥时,系统将提供指定密码的选项,在访问私钥时必须提供该密码。如果私钥被偷,除颁发者之外的其他任何人很难使用该私钥,因为已使用密码对其进行保护。这样,在攻击者破解并使用私钥前,会有足够的时间生成新的密钥对并删除所有涉及旧密钥的内容。

生成 ssh 密钥后,密钥将默认存储在家目录下的 .ssh/ 目录中。私钥和公钥的权限就分别为 600644.ssh 目录权限必须是 700

在可以使用基于密钥的身份验证前,需要将公钥复制到目标系统上。可以使用 ssh-copy-id 完成这一操作

[root@zhang ~]# ssh-copy-id root@192.168.25.151

通过 ssh-copy-id 将密钥复制到另一系统时,它默认复制 ~/.ssh/id_rsa.pub 文件 , -i 选项指定路径 ssh-copy-id -i ~/.ssh/id_rsa.pub

//SSH密钥演示 //使用 ssh-keygen 创建公钥-私钥对 [root@zhang ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:T0CdJq/Fyf5tUASVEZnEyFF5xIDRBAFixWVCCTyN2E0 root@zhang The key's randomart image is: +---[RSA 2048]----+ | +=@E*O/O@.| | .o*.Oo+ O o| | .B . . . | | .* . | | S+. . | | .o. . | | .. o | | . o | | . | +----[SHA256]-----+ [root@zhang .ssh]# ls id_rsa id_rsa.pub known_hosts //使用 ssh-copy-id 将公钥复制到远程系统上的正确位置 [root@zhang ~]# ssh-copy-id root@192.168.25.151 /bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" /bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.25.151's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.25.151'" and check to make sure that only the key(s) you wanted were added. //使用 ssh 命令无命令登录远程主机 [root@zhang ~]# ssh root@192.168.25.151 Last login: Mon Apr 27 17:51:02 2020 [root@z ~]# ip a s ens32 2: ens32: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:0c:29:a8:ce:a1 brd ff:ff:ff:ff:ff:ff inet 192.168.25.151/24 brd 192.168.25.255 scope global ens32 valid_lft forever preferred_lft forever //使用 scp 命令传送文件到远程主机 [root@z .ssh]# ls authorized_keys id_rsa id_rsa.pub [root@z .ssh]# scp id_rsa.pub root@192.168.25.150:/root/.ssh/authorized_keys root@192.168.25.150's password: id_rsa.pub 100% 388 174.4KB/s 00:00 [root@zhang ~]# cd .ssh/ [root@zhang .ssh]# ls authorized_keys id_rsa id_rsa.pub known_hosts [root@zhang .ssh]# chmod 600 authorized_keys //使用 scp 命令从远程主机上下载文件到本地 [root@zhang ~]# ls anaconda-ks.cfg [root@zhang ~]# scp root@192.168.25.151:/root/.ssh/xiazai . xiazai 100% 0 0.0KB/s 00:00 [root@zhang ~]# ls anaconda-ks.cfg xiazai //scp命令常用选项 -r //递归复制 -p //保持权限 -P //端口 -q //静默模式 -a //全部复制 3. 自定义 SHH 服务配置

虽然 OpenSSH 服务器通常无需修改,但会提供其他安全措施,可以在配置文件 /etc/ssh/sshd_config 中修改 OpenSSH 服务器的各个方面。

PermitRootLogin {yes|no} //是否允许root用户远程登录系统 PermitRootLogin without-password //仅允许root用户基于密钥方式远程登录 PasswordAuthentication {yes|no} //是否启用密码身份验证,默认开启 4. SSH 安全注意事项 密码应该经常换且足够复杂 [root@zhang ~]# tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs 生成30位的密码 AzEQCshZJd3z0mqZtS3KJbhqGf6gHq [root@zhang ~]# openssl rand 20 -base64 //生成20位随机密码 q44zFESKbjixYJ/o/+gyMqEb8OQ= 使用非默认端口 限制登录客户端地址 仅监听特定的IP地址 禁止管理员直接登录 仅允许有限制用户登录 AllowUsers AllowGroups 使用基于密钥的认证 禁止使用空密码 禁止使用SSHv1版本 设定空闲会话超时时长 利用防火墙设置ssh访问策略 限制ssh的访问频度和并发在线数 做好日志的备份,经常分析(集中于某台服务器) Superior. 原创文章 6获赞 2访问量 1202 关注 私信 展开阅读全文
作者:Superior.



服务管理 Linux openssh

需要 登录 后方可回复, 如果你还没有账号请 注册新账号