文章目录
- 1. 背景
- 2. ssh连接
- 2.1 win 下通过终端工具进行连接
- 2.2 Linux下通过ssh指令连接
- 2.3 ssh使用publickey来连接
1. 背景
最近开始接触docker技术、mysql技术,加上本人工作基本都在Linux下进行,因此需要一套Linux环境进行练习。虽然本人有一台ARM架构的Linux设备,但好多软件没有现成的,需要交叉编译,影响实际的效率。思之又之,决定租赁一台云服务器进行快速开始。
🎯 🏹 总之,为了快速实现我们的需求,选择了 云服务器方式。
此处省略云服务器搭建过程,一般购买后,设置对应的OS,设置一下密码,开启对应的端口就可以进行连接了。
2. ssh连接
云服务器可以直接打开网站,在网站上通过CloudShell
进行连接,缺点是必须要进入对应的网页。对于我们这种懒人来说,当然是在本地使用ssh远程连接更方便的。
在使用 ssh 进行连接之前,我们需要获取一下公网IP:
2.1 win 下通过终端工具进行连接
本人这里的终端工具是免费版的 mobaxterm
,有需要的可以进行下载 mobaxterm下载,打开软件后,按照下面进行操作:
上面输入IP后,点击OK进入下面的界面,输入用户名和密码后即可进行登录
2.2 Linux下通过ssh指令连接
当我们有一台Linux设备,或者本身就双系统的时候,在Linux下没有Mobaxterm软件,想要连接云服务器的时候,就需要通过ssh
指令进行操作了:
ssh 连接的时候,直接 ssh + 公网IP 就可以了,但是初次竟然失败了:
折腾了好久,查询资料以及看云服务器测的失败说明,都没有解决问题,后面猛然间发现用户名怎么是cat
不是我们的root
,猜测应该是继承了我们的设备主机名,因此换一个连接方式试一下:
ssh root@xx.xx.xx.xx #后面的xx.xx.xx.xx 公网IP,前面的root是云服务器用户名
这一次密码输入后一下子就连接上了。
你以为到这就结束了,no,每次进入都要输入密码,我还是不想输入密码怎么办,请看下面我们使用publickey
来解决这个问题。
2.3 ssh使用publickey来连接
如果我们在 Linux 服务器上正确配置了免密码登录,也就是使用用密钥认证代替密码认证,就可以实现不用输入密码就能远程登录到服务器。免密码登录的需求主要是为了方便、安全和高效。
-
实现方式
- 在客户机生成秘钥对,然后把公钥传给远程机
-
实现原理
- 自己的公钥储存在远程主机上。当我们尝试登录时,远程主机会向客户端发送一段随机字符串。客户端使用自己的私钥进行加密,并将加密后的结果发送回远程主机。远程主机随后使用事先存储的客户端的公钥来尝试解密这个字符串。如果解密成功,远程主机就会确认客户端是可信的,并直接允许客户端登录到shell,无需再输入密码。
- 加密和解密涉及到非对称加密算法(RSA),有兴趣的可以去研究下。
-
生成秘钥对
ssh-keygen -t rsa
中间按3次回车即可生成秘钥对。
cat@lubancat:~$ ls ~/.ssh/ id_rsa id_rsa.pub known_hosts known_hosts.old
上面的
id_rsa
是我们生成的私钥,id_rsa.pub
是我们的公钥。通过
ssh-copy-id
指令将本地的公钥传输到服务器端,指令格式如下:ssh-copy-id [选项] [用户名@]远程主机
参数说明
-i
:指定要复制的本地公钥文件路径,默认为~/.ssh/id_rsa.pub
。用户名
:远程主机上的登录用户名,如果省略,则使用当前本地主机的用户名。远程主机
:可以是远程主机的IP地址或域名。
此处,本人使用如下指令完成公钥传输:
ssh-copy-id -i ~/.ssh/id_rsa.pub root@xx.xx.xx.xx #xx.xx.xx.xx为公网IP
# 可以使用下面的简化指令,默认会追加,不覆盖
ssh-copy-id root@xx.xx.xx.xx #xx.xx.xx.xx为公网IP
注意事项
-
如果远程主机的
~/.ssh/authorized_keys
文件不存在,ssh-copy-id
命令会自动创建该文件。 -
确保远程主机的SSH服务已启动,并且允许公钥认证登录。
-
可以使用
cat /etc/ssh/sshd_config
指令查看是否是能公钥认证PermitRootLogin yes PasswordAuthentication yes UseDNS no HostKeyAlgorithms +ssh-rsa PubkeyAcceptedKeyTypes +ssh-rsa #本机此处是指定使用ssh-rsa进行认证,若发现没有开启,执行搜索开启
-
然后我们在服务器侧查看 ~/.ssh/authorized_keys
对比本地的公钥就知道有没有上传成功了。
后面我们再次连接ssh就发现不需要密码了。
行认证,若发现没有开启,执行搜索开启
```
然后我们在服务器侧查看 ~/.ssh/authorized_keys
对比本地的公钥就知道有没有上传成功了。
后面我们再次连接ssh就发现不需要密码了。