SSH服务:安全远程登录的终极指南
一、什么是 SSH 服务?
SSH(Secure Shell)服务是 Linux 系统中提供 远程安全登录 和 加密通信 的网络服务,默认运行在 22号端口,由 sshd
守护进程负责处理请求。
SSH 解决了传统 Telnet、FTP 等协议明文传输密码和数据的严重安全问题,是现代服务器远程运维的标准工具。
二、SSH 服务的主要用途
scp
或 sftp
实现加密文件传输三、SSH 的工作原理
关键特点:
-
使用了 非对称加密 + 对称加密 + 哈希算法。
-
通信全程加密,防止监听、篡改。
四、SSH 服务组件
sshd
ssh
scp
sftp
~/.ssh/authorized_keys
五、配置 SSH 服务(服务端)
配置文件路径:/etc/ssh/sshd_config
常见配置项说明:
Port 22
PermitRootLogin no
PasswordAuthentication yes/no
PubkeyAuthentication yes
AllowUsers user1 user2
重启服务使配置生效:
sudo systemctl restart sshd
六、SSH 身份验证方式
1. 密码验证(默认)
优点:简单
缺点:容易被暴力破解
2. 公钥/私钥对认证(推荐)
流程:
-
客户端生成密钥对(
ssh-keygen
) -
把公钥传到服务器(
~/.ssh/authorized_keys
) -
客户端用私钥自动验证,无需密码
更安全、适合自动化脚本、Git 操作等。
七、常见操作命令
# 启动 SSH 服务systemctl start sshd# 查看状态systemctl status sshd# 设置开机启动systemctl enable sshd# 客户端登录远程主机ssh 用户名@远程IP地址# 使用指定私钥连接ssh -i ~/.ssh/id_rsa 用户名@IP
八、安全建议
AllowUsers
或 AllowGroups
九、排查连接问题
-
端口被防火墙阻止:
firewall-cmd
检查规则 -
SELinux 阻止 SSH 登录:
getsebool -a | grep ssh
-
公钥权限不当:
.ssh/authorized_keys
权限必须为 600
十、关于ssh服务我想说的话。
1.服务器的配置文件在/etc/ssh/sshd_config
这个文件里定义了一些关键信息,例如是否允许root用户远程登陆,设定特定用户登录。
- 远程主机登录服务器时,应是登录服务器上的某个用户的,使用密钥登录的话,就要把客户端的公钥放到服务器某个用户的
~/.ssh/authorized_keys
文件中,这个文件每一行代表一个公钥。这是密钥登录的必要条件。同样的,如果某个用户想通过密钥的方式登录远程的客户端,不仅要将公钥放到~/.ssh/authorized_keys
,而且还要将私钥放到~/.ssh/
目录中。 - 权限问题。在服务端配置用户本身的ssh文件时,要注意他们的权限,
~/.ssh/
目录的的权限应该是007
。以及SELinux的上下文配置
。 ~/ssh/
目录下的文件介绍:authorized_keys
文件存储了ssh服务客户端的公钥,用于客户端连接本主机的 该文件所属用户 使用的。id_rsa
里面存储了文件所属用户的密钥对的私钥,用于解析其公钥加密的信息。id_rsa.pub
存储了文件所属用户的密钥对的公钥,用于向服务器建立ssh连接。know_hosts
存储了服务器上的/etc/ssh/
目录下的公钥,用于下次登录时识别主机身份。know_hosts.pub
是know_hosts
的一个备份文件,防止know_hosts
文件的备胎- openssh安装包的命令
ssh_keygen
生成一个ssh
密钥对。ssh_copy_id
将客户端的公钥传输到服务端哪里,用于接下来的密钥登陆。
例子ssh_copy_id root@192.168.197.133
这个命令的意思是连接到主机192.168.197.133
的root
命令。
十一、案例:如何利用Xshell实现windows到Linux的密钥对登录。
步骤一:在Windows中生成密钥对
法一:利用Xshel提供的工具
步骤一,利用Xshell提供的工具创建密钥对
以远程登录
root
用户为例:
步骤二:将公钥传到Linux
中的/root/.ssh/authorized_keys
文件
让后将保存在windows
中的公钥传到Linux
里面,使用cat命令将文件追加到/root/authorized_keys
文件中.
假如公钥被传输到了
/root
目录中。
cat ./id_rsa_2084 >> ./.ssh/authorized_keys#重启sshd服务systemctl restart sshd
到这里就可以检测是否可以利用Xshell进行密钥登录了。
步骤三:验证是否可以登录
在Xshell中输入下面的内容并回车
[C:\\~]$ ssh root@192.168.197.101
点击确定如果可以直接登录成功而不需要输入密码,那案例就成功了。
法二:直接在windows
的Powershell
工具,
步骤一:打开Powershell
并生成公钥
PS D:\\axwang\\document> ssh-keygenGenerating public/private ed25519 key pair.Enter file in which to save the key (C:\\Users\\28050/.ssh/id_ed25519):Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in C:\\Users\\28050/.ssh/id_ed25519Your public key has been saved in C:\\Users\\28050/.ssh/id_ed25519.pubThe key fingerprint is:SHA256:N9MOplTkve+R8WK3SQyW7oXMyhdfvcePvrgLQUeQyso 28050@xwangThe key\'s randomart image is:+--[ED25519 256]--+| oo. || o.o || . .+ o || oo o .. || . .S B o+. .|| E. + *=o++o|| . . .=O==|| ..o=oB=|| o===++|+----[SHA256]-----+
注意密钥对生成的路径在哪里(C:\\Users\\28050/.ssh/id_ed25519)
步骤二:使用scp
命令将公钥传输到Linux上。
PS D:\\axwang\\document> scp C:\\Users\\28050\\.ssh\\id_ed25519 root@192.168.197.101:/rootroot@192.168.197.101\'s password:id_ed25519 100% 399 48.7KB/s 00:00
步骤三:在Linux
中将公钥导入到/root/.ssh/authorized_keys
中
root@101 ~]# cat id_ed25519.pub >> .ssh/authorized_keys [root@101 ~]# cat .ssh/authorized_keys -n 1ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJQvaGula+N6SipJXFs2ZDT/W1XIsvWKQSMX59ukrcrW/eyY6Xs4zFIAaRao90VdpYwfSul0eY4HawbyqsXrGEkSMDnketjQcaCQxU9VGnqXED1Uss9RYKFC0lJB0PDj1Ak3vqCeG9ZWMpEwjDsm409op7Sjsb3Pvof/5T6E+STmCECD7hDCbBQWGnfY6srhKrkZl+Q4A1QnvxWDoeQPfwYhkzhtAhnvdgDWCwF63XBsElFhbQkd1cFKe25iO2klFUv+b8jcBjQ33XkMHo3+OfGeVYHeHSn2SFTLQMMuLqj/X+fKVoXvG+UQAKo9j/xt6NvKy8WZx8003qutENLxR5n183V8alEDIVw3sZ8SFFewJ5EWKlSkuhQ9vHO/N1mt/vavBaCeYJBVUX4wPWlzCBFjr2yc4q1k8+Yt2cENFhwlGkv8MaNSmTFF4vI4EiGjoDyklcXti6HGSg4Y98wkv1IJFM5JF55yFbI9drXyNIS5yqP6y4k4AAIUMsmMLgGPE= root@133 2ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJUi/04giBUqkunsE08Wgv0IgREqSCtb9amRYcXAE8+8 28050@xwang
步骤四:在Powershell
中使用ssh登录Linux主机
PS D:\\axwang\\document> ssh root@192.168.197.101Activate the web console with: systemctl enable --now cockpit.socketRegister this system with Red Hat Insights: insights-client --registerCreate an account or view all your systems at https://red.ht/insights-dashboardLast login: Wed Jun 4 20:20:25 2025 from 192.168.197.1[root@101 ~]#
没有跳出让人输入密码,说明密钥登录成功。
总结
其实
ssh
远程密钥登录的核心在于密钥对,不管在哪里登录只要能提供一组密钥对,并把这些密钥对方到该放到的位置,就可以实现密钥登陆。不管这对密钥对是在哪里产生的。