讲解一下ssh远程登陆的基础知识。
SSH (Secure Shell)是一种安全的远程登录协议,旨在提供比传统的未加密的远程登录协议更好的安全性。SSH协议采用了客户端-服务器架构,通过建立安全信道实现客户端和服务器之间的通信。SSH协议有三个层次:传输层、用户身份验证层和连接层。其中传输层负责保障通信的安全性,用户身份验证层负责验证用户身份,连接层提供类似于终端会话的机制,支持命令行操作。
SSH协议的优点是可以提供加密的安全通信,减小被中间人攻击或密码被窃听的风险,同时还能够提供数据完整性和认证机制。SSH协议也有许多应用,例如远程登录、文件传输、安全拷贝、端口转发等。
对于我们使用者而言,不需要知道其中原理。只要知道SSH通信组成有两部分,分别为ssh客户端程序
和ssh服务端程序
。连接之前,远程目标机器的ssh服务端程序要保持打开,然后本地主机使用ssh客户端程序发起连接请求,输入密码即可登陆成功。
下面分别介绍一下linux和windows平台安装ssh的方法。
1.安装ssh的客户端和服务端
正常情况系统默认安装了ssh客户端,依具体情况而定。
2. ssh服务的启动和关闭
调用cmd或powershell终端,然后按情况执行下面命令
开启服务:net start sshd
关闭服务:net stop sshd
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还是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)进行命令行操作这台远程机器了。
其实ssh默认是使用密钥登录的,密钥登录的一个优点就是登录的时候不需要输入密码,其原理大概就是登录的时候验证密钥和公钥是否匹配,每个密钥和公钥之间都是唯一匹配的。下面具体说一下准备工作:
在本地机器上执行命令ssh-keygen -t rsa -C “邮箱”
,例如:
上面执行完之后,会在/home/fan/.ssh/路径下生成id_rsa和id_rsa.pub文件。其中id_rsa为记录私钥的文件,id_rsa.pub为记录公钥的文件。
将上一步生成的id_rsa.pub文件内容拷贝追加到远程机器的/home/用户名/.ssh/authorized_keys
中即可。
上面两步做完,执行ssh登录命令,正常情况应该是不需要密码就能连接上了。例:
fan@pc:~$ ssh [email protected]
从原理角度讲,每个私钥和公钥都是可以放到多个机器上的,每个私钥(公钥)都有唯一匹配的公钥(私钥)。不过从安全性来讲肯定不建议这么做。
这个问题是出现在使用git拉取代码的时候,之前一直都是好用的。后来是由于ubuntu升级到22.04,导致ssh也升级到OpenSSH_8.9p1。据官方说这个版本的ssh默认不使用rsa的算法认证,而本地机器与服务器直接一直用的是rsa加密的key,所以才报了这个问题。
解决方法: 在/etc/ssh/ssh_config中加入下面这句话开启rsa算法认证
PubkeyAcceptedAlgorithms +ssh-rsa
用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是客户端程序配置文件。