Linux系列讲解 —— SSH登录

讲解一下ssh远程登陆的基础知识。

目录

  • 0. 基本概念
  • 1. 安装ssh程序
    • 1.1 windows平台(Win10)
    • 1.2 Linux平台(Ubuntu18.04)
  • 2. 密码方式远程登录
  • 3. 密钥方式远程登录
    • 3.1 生成私钥公钥对
    • 3.2 将公钥复制到远程机器
    • 3.3 尝试ssh远程登录
  • 4. 常见问题
    • 4.1 [email protected]: Permission denied (publickey).
    • 4.2 Received disconnect from 192.168.1.21 port 22:2: Too many authentication failures

0. 基本概念

SSH (Secure Shell)是一种安全的远程登录协议,旨在提供比传统的未加密的远程登录协议更好的安全性。SSH协议采用了客户端-服务器架构,通过建立安全信道实现客户端和服务器之间的通信。SSH协议有三个层次:传输层、用户身份验证层和连接层。其中传输层负责保障通信的安全性,用户身份验证层负责验证用户身份,连接层提供类似于终端会话的机制,支持命令行操作。

SSH协议的优点是可以提供加密的安全通信,减小被中间人攻击或密码被窃听的风险,同时还能够提供数据完整性和认证机制。SSH协议也有许多应用,例如远程登录、文件传输、安全拷贝、端口转发等。

对于我们使用者而言,不需要知道其中原理。只要知道SSH通信组成有两部分,分别为ssh客户端程序ssh服务端程序。连接之前,远程目标机器的ssh服务端程序要保持打开,然后本地主机使用ssh客户端程序发起连接请求,输入密码即可登陆成功。

1. 安装ssh程序

下面分别介绍一下linux和windows平台安装ssh的方法。

1.1 windows平台(Win10)

1.安装ssh的客户端和服务端
正常情况系统默认安装了ssh客户端,依具体情况而定。
Linux系列讲解 —— SSH登录_第1张图片

2. ssh服务的启动和关闭
调用cmd或powershell终端,然后按情况执行下面命令
开启服务:net start sshd
关闭服务:net stop sshd

1.2 Linux平台(Ubuntu18.04)

1.安装ssh的客户端和服务端
正常情况系统默认安装了ssh客户端,依具体情况而定。

sudo apt install openssh-server
sudo apt install openssh-client

2.开启服务和关闭服务

#启动服务
sudo systemctl start ssh

#关闭服务
sudo systemctl stop ssh

#重启服务
sudo systemctl restart ssh

3.查看服务状态

sudo systemctl status sshd

开启状态:
Linux系列讲解 —— SSH登录_第2张图片

关闭状态:
Linux系列讲解 —— SSH登录_第3张图片

2. 密码方式远程登录

无论是linux还是windows系统,使用ssh客户端远程登录的命令格式都是ssh 用户名@ip地址。已知远程机器里注册好了账户sun,并设置好了密码。登录实例如下:

fan@pc:~$ ssh [email protected]
[email protected]'s password: 
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.4.0-146-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
...
Last login: Mon Apr 24 18:50:03 2023 from 172.32.1.76
sun@pc:~$ 

登录成功后,就可以通过该账户(sun)进行命令行操作这台远程机器了。

3. 密钥方式远程登录

其实ssh默认是使用密钥登录的,密钥登录的一个优点就是登录的时候不需要输入密码,其原理大概就是登录的时候验证密钥和公钥是否匹配,每个密钥和公钥之间都是唯一匹配的。下面具体说一下准备工作:

3.1 生成私钥公钥对

在本地机器上执行命令ssh-keygen -t rsa -C “邮箱”,例如:
Linux系列讲解 —— SSH登录_第4张图片

上面执行完之后,会在/home/fan/.ssh/路径下生成id_rsa和id_rsa.pub文件。其中id_rsa为记录私钥的文件,id_rsa.pub为记录公钥的文件。

3.2 将公钥复制到远程机器

将上一步生成的id_rsa.pub文件内容拷贝追加到远程机器的/home/用户名/.ssh/authorized_keys中即可。

3.3 尝试ssh远程登录

上面两步做完,执行ssh登录命令,正常情况应该是不需要密码就能连接上了。例:

fan@pc:~$ ssh [email protected]

从原理角度讲,每个私钥和公钥都是可以放到多个机器上的,每个私钥(公钥)都有唯一匹配的公钥(私钥)。不过从安全性来讲肯定不建议这么做。

4. 常见问题

4.1 [email protected]: Permission denied (publickey).

这个问题是出现在使用git拉取代码的时候,之前一直都是好用的。后来是由于ubuntu升级到22.04,导致ssh也升级到OpenSSH_8.9p1。据官方说这个版本的ssh默认不使用rsa的算法认证,而本地机器与服务器直接一直用的是rsa加密的key,所以才报了这个问题。

解决方法: 在/etc/ssh/ssh_config中加入下面这句话开启rsa算法认证

PubkeyAcceptedAlgorithms +ssh-rsa

4.2 Received disconnect from 192.168.1.21 port 22:2: Too many authentication failures

用ssh连接远程机器时,报了上面的错误。这个是由于我本地创建了很多对密钥,连接的时候验证私钥和公钥次数超过最大验证次数,导致了这个问题。

解决方法1(推荐):
将远程机器最大的验证次数调高,编辑远程机器中的/etc/ssh/sshd_config文件,追加如下内容:

# 这个次数可以依照具体情况进行调整
MaxAuthTries 10

然后重启一下远程机器的sshd服务,重启命令可以看上面 1. 安装ssh程序

解决方法2:
连接的时候使用选项Pubkeyauthentication,这样就此次登录就不会用密钥验证登录的方式而变为密码登录方式。

ssh [email protected] -o Pubkeyauthentication=no

解决方法3:
如果想永久的设置不使用密钥验证登录。可以直接编辑/etc/ssh/ssh_config文件,添加PubkeyAuthentication no即可。

注意上面的sshd_config和ssh_config不要弄混淆。sshd_config是服务端程序配置文件,ssh_config是客户端程序配置文件。

你可能感兴趣的:(linux,ssh,服务器)