目录
一、概念
SSH,全称为 Secure Shell(安全外壳协议) ,是一种加密网络协议,用于在不安全的网络中安全地传输数据和执行命令。其目标是提供一种安全的远程登录方法,使用户可以安全地连接到远端计算机,而不必担心信息被窃听、篡改或伪造。
SSH 协议在公共密钥加密、对称加密和哈希函数等技术基础上建立,支持身份验证、文件传输、隧道传输、远程管理等功能,广泛应用于 Linux 和 Unix 系统中,也被许多网络设备采用。
在 SSH 的工作过程中,客户端和服务器之间会使用公私钥对进行身份验证,并通过 Diffie-Hellman 密钥交换算法生成对称加密密钥。这样,即使被攻击者监听到了密钥交换过程,也无法获取到实际使用的密钥。
SSH 分为 SSH-1 和 SSH-2 两个版本,其中 SSH-2 是最新版本,也是当前默认使用的版本。SSH-2 在安全性、效率和可扩展性方面都有显著的优势,因此也得到了广泛的应用。
二、特点
SSH 具有以下特点:
-
安全性:使用公钥加密、对称加密和哈希函数等技术进行数据传输,能够有效防止信息被窃听、篡改或伪造。同时还支持多种身份验证方式,如密码、公钥等,为用户提供更加安全的访问控制。
-
灵活性:SSH 协议可以用于多种网络协议,包括 TCP/IP、UDP、IPv4 和 IPv6 等。并且它还支持各种操作系统和平台,如 Linux、Unix、Windows 等。工作在传输层和应用层。
-
高效性:SSH 采用一些先进的加密算法和压缩技术,可以大幅减少传输过程中的数据量,提高数据传输速度和网络带宽利用率。
-
易用性:SSH 客户端程序易于安装和使用,并且不需要显式地打开安全通道等前置工作,使得用户可以快速地连接到远程服务器,执行任意操作。
繁琐的身份验证过程可以通过使用 SSH Agent 等代理工具简化,并且很多 Linux 发行版已经默认集成了 SSH 客户端和服务器。因此,在实际应用中,SSH 已经成为了一种十分方便和可靠的远程登录和管理工具。
SSH服务的常用管理命令
ssh [options] [user@]hostname [command]
使用 SSH 命令连接到远程服务器时,需要提供目标服务器的登录账户名和密码等信息,并且会经过一些身份验证的步骤,以确保用户的安全性。例如:
ssh user@192.168.1.100
此命令将连接到 IP 地址为 192.168.1.100 的远程主机,并使用 user
用户的身份登录。
除了简单地登录到远端服务器外,还可以通过指定执行的远程命令,对远程主机进行操作。例如:
ssh user@192.168.1.100 ls -l /var/log
以上命令将登录到名为 192.168.1.100 的远程主机,执行 ls -l /var/log
命令,然后列出该目录下的所有文件及其详细信息。
需要注意的是,在使用 ssh 工具进行远程连接时,应确保目标服务器已经安装了 SSH 服务端,并已启动该服务。
SCP 命令(Secure Copy Protocol)是一种基于 SSH 协议的 Linux/Unix 系统下的文件传输工具,可以通过网络在本地和远程服务器之间进行安全、加密的文件传输。其语法格式如下:
scp [参数] <原路径> <目标路径>
其中,<原路径> 表示源文件或源目录位置,<目标路径>表示要传输到的目标机器和位置。例如:
scp /path/to/local/file user@remote:/path/on/remote
以上命令将 /path/to/local/file
从本地计算机拷贝到名为 remote
的远程服务器上。
下面是一些常用的参数:
-r
:递归复制整个目录及其所有子目录;-P
:指定 SSH 服务监听的端口号,默认为 22;-C
:使用压缩选项;-p
:保留原始文件属性信息,包括文件权限、时间戳等;-v
:显示 SCP 命令执行的详细过程。
例如,以下命令将本地目录 /path/to/local/dir 复制到名为 remote 的远程主机的目录 /path/on/remote 下:
scp -r /path/to/local/dir user@remote:/path/on/remote/
以上命令将从 remote1
主机上的 /path/to/remote/file
,拷贝到 remote2
主机的 /path/on/remote2
目录下。
需要注意的是,使用 SCP 命令传输文件时,要确保目标服务器已经安装了 SSH 服务端,并在远程主机上开启了 scp 命令所使用的端口。
SFTP 命令(SSH File Transfer Protocol)是一种基于 SSH 安全协议的文件传输工具,类似于 FTP。与 FTP 不同的是,SFTP 采用 SSL/TLS 加密方式,可以提供更高的安全性,而且其传输效率更高,并且避免了传统 FTP 在防火墙、代理等网络环境中存在的许多问题。
SFTP 的命令格式和 FTP 类似,但是需要在 sftp 后面加上对应的用户名和服务器地址信息:
sftp [username]@[hostname or IP]
例如:
sftp user@192.168.1.100
以上命令将连接到名为 192.168.1.100的远程服务器,并使用 user 用户的身份登录。
在 SFTP 中,用户可以执行各种常规的文件操作,例如上传、下载、重命名、删除、新建目录等等。下面是一些常用的 SFTP 命令:
get
:从远程主机下载文件到本地;put
:上传本地文件到远程主机;ls
:列出远程主机的某个目录下的所有文件;cd
:切换远程主机当前目录;mkdir
:在远程主机上创建一个新目录;rm
:在远程主机上删除一个文件或整个目录;rename
:在远程主机上重命名一个文件或目录。
例如,以下命令将本地计算机上的 /path/to/local/file
拷贝到远程服务器的 /path/on/remote
目录下:
put /path/to/local/file /path/on/remote/
需要注意的是,在使用 SFTP 进行远程文件传输时,应确保目标服务器已经安装了 SSH 服务端,并已启动该服务。
ssh-copy-id
ssh-copy-id 是一个常用的命令行工具,用于将本地计算机上的 SSH 公钥自动复制到远程主机的 ~/.ssh/authorized_keys 文件中,以实现 SSH 无密码登录。
ssh-copy-id [options] username@remote
其中,username 是远程主机上的用户名,remote 是远程主机的地址或域名。如果目标服务器监听 SSH 默认端口 22,则可以省略端口参数;否则,请使用 -p
参数指定特定的端口号。
例如,以下命令将将当前用户的公钥添加到远程主机 192.168.1.100 上的 ~/.ssh/authorized_keys 文件中:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.1.100
在 ssh-copy-id 命令中,-i
参数用于指定要使用的 SSH 公钥路径。这个参数后面跟着公钥的绝对路径,默认情况下是~/.ssh/id_rsa.pub
。
在本例中,-i
~/.ssh/id_rsa.pub
指定了要将本地计算机上存储的 id_rsa.pub
文件添加到远程主机的 ~/.ssh/authorized_keys
文件中。该公钥文件是 SSH 密钥对(公钥和私钥)中的公钥部分,用于进行远程主机的身份验证,以实现 SSH 无密码登录。
三、身份验证机制
在 SSH 中,身份验证是安全的关键之一,因为它决定了谁可以获得访问受保护资源(例如服务器)的权限。SSH 协议采用了多种身份验证机制,包括以下几种:
- 密码身份验证 (密码验证,需要提供密码)
密码身份验证是最基本、同时也是最常用的 SSH 身份验证方式。在此方式下,用户需提供用户名和与之对应的口令(密码),以此来验证身份。在 SSH 连接建立时,客户端会将明文口令通过 SSH 协议传递至服务器,该过程中需要使用加密手段进行保护。
2.公钥身份验证 (秘钥对验证,无需提供密码,直接登录)
公钥身份验证也是一种常用的 SSH 身份验证方式,它不需要输入密码,而是基于公钥加密技术实现身份认证。具体地,用户需要在本地生成一对公私钥,并将公钥部分存储到要连接的远程服务器或设备上,以便实现无密码或较高安全性的身份验证。
以下是一个简单的公钥身份验证示例:
2.1在本地机器上生成 RSA 密钥
在本地计算机上使用 ssh-keygen 命令生成公私钥对:
ssh-keygen -t rsa
执行该命令后,系统会提示输入保存密钥的文件名和路径等信息,按照需要设置即可。
2.2将公钥复制到远程服务器
将本地机器上的公钥,复制到要连接的远程服务器或设备上。可以使用以下命令完成此操作:
ssh-copy-id user@remote_server_ip
在该命令中,user
是指远程服务器上的用户名,remote_server_ip
则是要连接的远程服务器 IP 地址。
运行该命令后,系统会自动将本地机器上 .ssh/id_rsa.pub 文件的内容,添加到远程服务器的 ~/.ssh/authorized_keys 文件中。
2.3连接远程服务器
使用以下命令连接远程服务器:
ssh user@remote_server_ip
当出现提示时,输入本地计算机的密码后,即可成功登录远程服务器了。
注意:在进行公钥身份验证时,请先确保服务器中已经安装了对应的公钥,并将其添加到 ~/.ssh/authorized_keys 文件中。否则,连接过程将会因为公钥认证失败而无法完成。
3.主机身份验证
主机身份验证主要是用于确认连接方向,即确定客户端连接的服务器是否是预期的目标设备,防止受到类似中间人攻击的安全问题。SSH 支持多种主机身份验证方式,如基于密钥的主机身份验证、域名匹配等。通过对双方身份进行认证和比对,SSH 可以确定连接是否可信。
4.Kerberos 身份验证
Kerberos 身份验证是一种基于票据的身份验证方式,能够实现整个系统中用户的单点登录 (SSO)。在执行 SSH 命令时,在访问远程主机前需要先通过 Kerberos 认证中心获取票据,然后使用这些票据请求服务器给予授权。
需要注意的是,在执行 SSH 身份验证时,应采取合适的身份验证方式,并避免使用弱口令等存在安全漏洞的身份验证方式,从而保护自己的服务和数据的安全。
四、加密机制
SSH采用了多种加密技术来确保数据的私密性、完整性和真实性,这些加密技术通常包括以下几个方面:
单向加密:不可逆的加密算法。
单向加密(One-way encryption)是一种只能用于加密的 Hash 函数,其特点是只有输入数据能够被转换为已知输出,而不能将已知的消息还原成原来的明文。这种加密方式常用于密码存储和验证等场景中。
对称加密
对称加密机制指的是使用同一组密钥对信息进行加密和解密操作的加密方法,比较常见的有 AES(Advanced Encryption Standard)、Blowfish 和 3DES(Triple Data Encryption Standard)等。在 SSH 连接过程中,双方会协商出一个对称密钥(相同的),然后使用这个对称密钥对通信数据进行加解密,从而保证通信过程中的私密性和安全性。
非对称加密
非对称加密机制又称为公钥密码体制,一般采用 RSA 或 DSA 算法,它的特点是用不同的密钥来进行加密和解密操作。在 SSH 协议中,服务器在连接过程中生成一个密钥对(公钥和私钥),并将其公钥发给客户端。客户端在连接建立之前会先对服务器发来的公钥进行验证,确保该公钥是由客户端所期待的服务器正确地发送的。如果公钥被确认,则客户端将使用它对消息进行加密,只有拥有相应私钥的服务器才能解密加密的消息,并响应请求。
五、基本参数
SSH的服务号为sshd
端口号:TCP:22
SSH服务器端的配置文件
/etc/ssh/sshd_config ssh主程序sshd的配置文件
~/.ssh/authorized_keys 密钥库文件
/etc/ssh/ssh_host_* 服务器的公钥和私钥文件
客户端的配置文件
/etc/ssh/ssh.config 客户端的全局配置文件
~/.ssh/known_hosts 客户端存储主机指纹的文件
~/.ssh.id_rsa 客户端生成的私钥
~/.ssh.id_rsa.pub 客户端生成的公钥
注意:没有绝对的客户端和服务器,主要是看谁是发起端,谁是接收端