linux 的服务
SSH
SSH(Secure Shell)是一种网络协议,用于在网络上安全地进行远程登录和执行命令。它提供了对网络中的远程计算机进行安全访问和数据传输的加密功能。下面是关于Linux SSH服务的详细解释:
-
SSH服务的作用:
-
远程登录:通过SSH,用户可以从本地计算机远程登录到远程计算机,执行命令和操作远程计算机。
-
文件传输:SSH还提供了安全的文件传输机制,可以通过SCP(Secure Copy)或SFTP(SSH File Transfer Protocol)协议传输文件。
-
远程管理:管理员可以使用SSH连接到远程服务器,进行配置、管理和维护操作。
-
-
SSH服务的工作原理:
-
客户端和服务器:SSH由客户端和服务器组成。客户端是用于远程访问的本地计算机,而服务器是受控的远程计算机。客户端和服务器之间建立一个安全的连接。
-
加密和身份验证:SSH使用加密算法来保护数据传输的隐私和完整性。它还支持多种身份验证方法,如基于密码、公钥和证书的身份验证。
-
端口和配置:SSH默认使用22号端口进行通信。通过在SSH服务器上进行适当的配置,可以控制访问权限、身份验证方法和其他安全设置。
-
-
配置SSH服务:
-
安装SSH服务器:在大多数Linux发行版中,默认安装了SSH服务器软件包。如果没有安装,可以使用包管理工具(如apt、yum或zypper)安装相应的软件包。
-
配置文件:SSH服务器的配置文件通常位于
/etc/ssh/sshd_config
。你可以编辑该文件来修改服务器的行为,如更改监听端口、启用/禁用密码身份验证、配置密钥认证等。 -
重启SSH服务:在修改配置文件后,通常需要重新启动SSH服务以使更改生效。可以使用命令
systemctl restart sshd
(基于systemd)或service ssh restart
(基于SysV init)来重新启动SSH服务。
-
-
SSH客户端和工具:
-
OpenSSH:OpenSSH是使用最广泛的SSH实现,包括SSH客户端和服务器组件,可以在大多数Linux发行版中找到。
-
SSH命令行工具:SSH客户端可以使用
ssh
命令在终端中与远程服务器进行交互。例如,ssh username@remotehost
将使用用户名和远程主机地址建立SSH连接。 -
SCP和SFTP:SCP和SFTP是用于在SSH连接上安全传输文件的命令行工具。可以使用
scp
和sftp
命令进行文件传输操作,如复制文件、上传和下载文件等。
-
通过配置和使用SSH服务,用户可以方便地进行远程管理、远程访问和文件传输,并且得到了数据传输的安全保障。SSH在保护数据安全、远程管理和协作中发挥着重要的作用,是Linux系统的关键服务之一。
SSH远程连接
运行SSH命令:在终端中运行SSH命令以建立连接。SSH命令的基本语法是:
ssh <username>@<host>
其中<username>
是目标主机的用户名,<host>
是目标主机的IP地址或主机名。
例如,连接到远程主机example.com
,用户名为user
的帐户:
ssh user@example.com
如果使用非标准的SSH端口(默认为22),可以使用-p
选项指定端口号:
ssh -p <port> <username>@<host>
例如,使用SSH连接到端口号为2222的远程主机:
ssh -p 2222 user@example.com
传输文件命令
SCP(Secure Copy)是一种基于SSH协议的安全文件传输工具。它允许用户在本地和远程系统之间进行文件传输,提供了加密和身份验证机制以确保数据传输的安全性。
使用SCP进行文件传输非常简单,以下是一些常用的SCP命令示例:
从本地系统发送文件到远程系统:
scp <本地文件目录> <username>@<主机ip>:<目标目录>
例如,将本地文件file.txt
发送到远程主机example.com
的/home/user
目录下:
scp file.txt user@example.com:/home/user
从远程系统复制文件到本地系统:
scp <远程用户名>@<ip>:<远程目录> <本地目录>
例如,从远程主机example.com
复制文件remote_file.txt
到本地目录/path/to/local
:
scp user@example.com:/path/to/remote_file.txt /path/to/local
从远程系统复制整个目录到本地系统:
scp -r <remote_user>@<ip>:<remote_directory> <local_directory>
例如,从远程主机example.com
复制目录/home/user/files
到本地目录/path/to/local
:
scp -r user@example.com:/home/user/files /path/to/local
指定不同端口号:
scp -P <port> <source> <destination>
例如,使用SCP通过SSH协议的端口2222传输文件:
scp -P 2222 file.txt user@example.com:/home/user
安装openssh
centOS kali 默认安装了ssh,可以通过以下命令查询
dpkg -l | grep openssh
使用公私钥登录
使用公钥/私钥对进行SSH登录可以实现更安全的身份验证,而不需要每次输入密码。下面是配置公钥/私钥登录的一般步骤:
ssh服务 通过 密码登录 流程
SSH通过公私钥登录流程
-
生成密钥对: 在本地计算机上生成公钥/私钥对。可以使用SSH客户端工具(如OpenSSH或PuTTY)来生成密钥对。使用以下命令生成OpenSSH密钥对:
ssh-keygen -t rsa -b 2048
ssh-keygen
这将生成一个2048位的RSA密钥对,默认情况下将在
~/.ssh
目录下创建id_rsa
和id_rsa.pub
文件。id_rsa
是私钥,而id_rsa.pub
是公钥。 -
在服务器中 修改配置
/etc/ssh/sshd_config
将内容修改为:
-
将公钥复制到目标服务器: 将您生成的公钥复制到目标服务器上的
~/.ssh/authorized_keys
文件中。可以使用以下命令将公钥复制到服务器:ssh-copy-id <username>@<ip>
或者,如果您无法使用
ssh-copy-id
命令,可以手动将公钥复制到服务器上的authorized_keys
文件。 -
设置正确的权限: 在目标服务器上,确保设置了正确的权限。运行以下命令可以确保权限设置正确:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
-
配置SSH客户端连接: 在本地计算机上,使用SSH客户端连接到目标服务器时,指定私钥文件的路径。例如:
ssh -i /path/to/private_key <username>@<ip>
这将使用指定的私钥进行身份验证,而无需输入密码。
通过配置公钥/私钥登录,您可以实现更便捷和安全的SSH连接,而无需每次输入密码。确保妥善保管私钥,并将公钥仅复制到受信任的服务器上以确保安全性。
openSSH加固
要加固 OpenSSH 的配置文件,可以采取一些安全措施来增加系统的安全性。下面是一些常见的措施:
关闭不必要的功能:配置SSH日志
在 OpenSSH 的配置文件 /etc/ssh/sshd_config
中,检查以下选项并将其设置为安全的值:
-
PermitRootLogin
:禁止 root 用户直接远程登录。PermitRootLogin no
-
PasswordAuthentication
:禁用密码身份验证,仅允许公钥身份验证。PasswordAuthentication no
-
PubkeyAuthentication
:确保启用公钥身份验证。PubkeyAuthentication yes
-
PermitEmptyPasswords
:禁止空密码登录。PermitEmptyPasswords no
在对这些选项进行更改之后,使用以下命令重新加载 SSH 配置:
sudo service ssh restart
使用限制: 使用 AllowUsers
、AllowGroups
、DenyUsers
和 DenyGroups
选项,仅允许特定用户或组进行远程登录。
例如,可以将 AllowUsers
选项设置为只允许特定用户登录:
AllowUsers user1 user2
vim /etc/ssh/sshd_config
重启
可进行调整
这个选项决定了我们在使用ssh连接 登录的时间
/etc/profile
在文件末尾添加
export TMOUT =10
使配置文件生效 soure /etc/proile
开启空口令登录
-
打开 SSH 配置文件
/etc/ssh/sshd_config
:sudo nano /etc/ssh/sshd_config
-
在配置文件中找到以下选项:
#PermitEmptyPasswords no
将该行取消注释(删除前面的
#
符号)并将其设置为yes
:PermitEmptyPasswords yes
这会允许用户使用空口令进行 SSH 登录。
-
保存并关闭文件。
-
重新加载 SSH 配置:
sudo systemctl restart sshd
调式访问速度
SSH启动密码策略
在 /etc/login.defs
文件中,你可以进行一些密码策略相关的配置。虽然这个文件主要用于系统登录的设置,但其中包含了一些密码策略的配置选项。以下是一些常见的密码策略相关配置选项:
-
密码最小长度(PASS_MIN_LEN): 找到
PASS_MIN_LEN
配置项,并设置为所需的密码最小长度。示例:PASS_MIN_LEN 8
以上示例将密码最小长度设置为 8 个字符。你可以根据需求设置不同的值。
-
密码过期时间(PASS_MAX_DAYS): 找到
PASS_MAX_DAYS
配置项,并设置为用户密码的最大使用天数。示例:PASS_MAX_DAYS 30
以上示例将用户密码的最大使用期限设置为 30 天。密码将在达到该期限后过期。
-
密码更改提前通知(PASS_WARN_AGE): 找到
PASS_WARN_AGE
配置项,并设置为在密码过期之前多少天提供警告通知。示例:PASS_WARN_AGE 7
以上示例将在密码过期前 7 天提供警告通知。
4.PASS_MIN_DAYS 修改密码最小时间间隔
另一个文件
/etc/security/pwquality.conf
文件是一个配置文件,它用于定义密码策略的要求和限制。在这个文件中,你可以设置密码的复杂性要求,例如密码长度、字符类型、重复字符等。以下是一些常见的配置选项和其解释:
-
minlen
:minlen
选项定义密码的最小长度。例如:minlen = 8
以上示例将密码的最小长度设置为 8 个字符。
-
dcredit
:dcredit
选项指定了使用数字(digits)的影响力,数字代表密码中的数字字符数量。该选项允许给予数字字符较高的权重。dcredit = -1
以上示例将数字字符的影响力设置为 -1。
-
ucredit
:ucredit
选项指定了使用大写字母(uppercase)的影响力,即密码中的大写字母数量。同样,该选项允许给予大写字母较高的权重。ucredit = -1
以上示例将大写字母的影响力设置为 -1。
-
lcredit
:lcredit
选项指定了使用小写字母(lowercase)的影响力,即密码中的小写字母数量。同样,该选项允许给予小写字母较高的权重。lcredit = -1
以上示例将小写字母的影响力设置为 -1。
-
ocredit
:ocredit
选项指定了使用其他字符(other)的影响力,即密码中的其他字符数量,如特殊字符。同样,该选项允许给予其他字符较高的权重。ocredit = -1
以上示例将其他字符的影响力设置为 -1。
-
maxrepeat
:maxrepeat
选项定义了允许的最大字符重复次数。例如:maxrepeat = 3
以上示例将允许的最大字符重复次数设置为 3 次。
-
minclass= 定义密码必须满足同时有几何种字符
查看ssh日志
-
Ubuntu/Debian:
-
SSH 认证日志位于
/var/log/auth.log
文件中。您可以使用以下命令查看 SSH 日志:
sudo cat /var/log/auth.log | grep ssh
这将显示包含 “ssh” 关键词的所有日志条目。
-
-
CentOS/RHEL:
-
SSH 日志通常位于
/var/log/secure
文件中。您可以使用以下命令查看 SSH 日志:
sudo cat /var/log/secure | grep ssh
-