Hexo历险记之八SSH远程链接服务器

前言

到现在为止,你已经学会了在本地编辑文档的所有技巧,那么你就可以尽情地表达你的想法了。

这篇文章,是为了教会你如何用SSH远程连接服务器。再生成密钥对,实现免密码登录。

时隔四年,重启Hexo历险计划!

Hexo历险记之八SSH远程链接服务器

SSH为Secure Shell的缩写,是为远程登录会话和其他网络服务提供安全性的协议。只要本机和远程服务器都有SSH服务,那么就可以使用SSH服务进行连接,实现文件复制和命令运行。

检查SSH

Linux

先检查一下远程服务器是否有ssh服务,一般来说是都有的,出现如图结果即为存在。那么你就可以直接跳过安装SSH,直接开始生成密钥对。

sudo ps -e |grep ssh
image-20220728210431295

Windows

:开启服务
net start sshd

Mac

sudo systemsetup -getremotelogin
image-20220728210921506

安装SSH

但是,倘若是新购买的服务器,或者是新拉取的Docker系统镜像中也是存在没有的可能性。

Linux

以CentOS系统为例,使用包管理器yum安装sshd服务。

# 更新包管理器
yum update -y

# 安装初始化脚本和网络工具
yum install -y initscripts  net-tools.x86_64

# 安装包括ssh在内的诸多小工具。
yum install -y openssh-server

Windows

设置->应用->可选功能->添加功能,选择OpenSSH服务器,点击下载即可。

img

Mac

Mac本身是安装了SSH服务,只是默认情况下是不会开机自启的。

: 启动sshd服务:
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

: 停止sshd服务:
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist

:打开开机自启服务
sudo systemsetup -setremotelogin on 

:关闭开机自启服务
sudo systemsetup -setremotelogin off

本地配置长时间连接

一般来说,SSH连接如果一段时间内没有信息交互,就会自动断开。

所以为了长时间保持ssh连接,可以修改/etc/ssh/ssh_config文件,要求60s内发送一个信息来保持连接。

ServerAliveInterval 30

ServerAliveCountMax 10
image-20210527234823807

生成密钥对

首先,在本地生成了密钥对,以[email protected]邮箱为例。

运行命令会询问你,是否要配置SSH密钥的密码,一般来说都是直接敲击两次回车,直接生成没有密码的密钥。没错,密钥也是可以设置密码的。但是我使用密钥的原因,就是为了省去输入密码的麻烦,自然不会再多此一举。

ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/github_id_rsa
  • -t:指定要创建的密钥类型为RSA
  • -C:添加注释,一般是用邮箱
  • -f:指定用来保存密钥的目录位置及文件名,~/.ssh/github_id_rsa
image-20220728213945677

可以用编辑器打开私钥文件github_id_rsa查看内容。一般私钥文件是保存到自己本地PC的,不要在网络上存储备份,也不要发给任何人,因为只有他能通过公钥校验的。

-----BEGIN OPENSSH PRIVATE KEY-----
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
n0I6NcH5GwQ30AAAALMTIzQDEyMy5jb20=
-----END OPENSSH PRIVATE KEY-----

可以用编辑器打开公钥文件github_id_rsa.pub查看内容。公钥文件一般就是放在服务器的指定位置,当本地PC通过SSH服务进行连接时会用公钥和私钥进行计算匹配,如果不匹配就只能用账号和密码登录了。

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCz2g8WxP4rSXSogMoMg+rmeniH6GG7EroodU4YtuwmZ5jZHXw+IrY4IXSulEHqCj/+j5nZ4nyzsgTFGT9zoYIR5ikpOSc0xM4qpEsCrQrkMVFR2BrFs+uRLqJ/IkF3URqk4vFkeoentdCwgd93fXookM+5PwQomCwHNl4TXaRzxPVYKO5D3HUlvzQJDzBtwMqRZlRPQEPUTcwKmp2g4qDHtvc889nE6JsBUZSLDdbNYJcmrKvmCiOxrV0GgSQtuPGOwhpP0QzsZM86t7lcsYF8kRNooFj4XEJU8gdgNLOBI+IbD8l1QkKPRVBxu5tPz9PicOoLm0/jR6xsvy2zu0sTfKWvhs/GKo7GhU0Uj820iNqVQMqEbTwZpH/WKDRCciGRJBym3gpw7sGGWW3KZTI9Yn4177xZRYqjqM1xqzLay2I7+VgOJuNWR1ZDq+EofJgGYykFWrBDQqBYkXT0EkRqQdNuhpAZ6vy+KcXY7RExaJbVIgDXm00cdlIh7iIkKIc= [email protected]

服务器配置公钥

往远程服务器上面配置密钥总共有三种方式:

  1. 登录阿里云控制台,从网页导入SSH公钥证书
  2. 在本地PC使用ssh-copy-id命令来复制公钥到指定服务器的指定用户下
  3. 手动复制公钥内容到服务器

小白第一次玩服务器就用第一个方法吧,简单粗暴地配置root账户!就是会默认把密码登录禁用,只能使用秘钥登录。当然可以改为同时用密钥和密码登录。

第二个方法也简单,一个命令就能完成复制。而且弥补了第一个方法只能配置root账户的缺陷,老手就是用它配置其他自定义账户。中间会需要账户的密码进行一次校验,之后就不需要了。

第三个方法是最复杂的,需要手动修改文件,很高的危险性。一个不小心就彻底GG,只能用备份文件恢复或者重置系统。好处就是你能够明确地了解自己究竟干了什么。

三个方法各有优劣吧,一般来说就是第一和第二个方法实现配置公钥。第三个方法很少使用。

阿里云控制台导入证书

致敬官方文档。

在阿里云控制台导入证书的话,阿里云对root用户做的事是两步:

  • 将公钥信息追加到服务器的/root/.ssh/authorized_keys文件中;
  • 修改/etc/ssh/sshd_config文件中的PasswordAuthenticationno

这种方式会默认把密码登录禁用,只能使用秘钥登录。

ssh-copy-id

在本地PC使用ssh-copy-id命令,一条命令可以完成复制公钥。注意:中间需要输入账户密码。

: ssh-copy-id -i 公钥文件 账户名称@服务器的公网IP

ssh-copy-id -i ~/.ssh/github_id_rsa.pub [email protected] 
  • -i:指定私钥文件位置,例如我的就是~/.ssh/github_id_rsa.pub
  • 账户名称,指定的是管理员账户root
  • 我之前服务器是阿里云的,外网IP就是39.96.12.167
image-20210526233237963

手动复制公钥

SSH在尝试远程登录的时候,会去指定用户的根目录下寻找~/.ssh/authorized_keys文件,再依次读取文件中的每一行公钥跟本地PC的密钥进行匹配,如果匹配成功就建立连接。

既然如此,那么我们以给keen用户新增公钥来进行一次示例。

第一步,将本地的github_id_rsa.pub公钥信息追加到远程服务器的~/.ssh/authorized_keys文件,注意附加权限。

# 切换至自己创建的keen用户
su keen

# 创建 ~/.ssh 文件夹
mkdir ~/.ssh

# 创建 ~/.ssh/authorized_keys 文件
vim ~/.ssh/authorized_keys

# 按`i`进入编辑模式,用剪贴板把本地的公钥复制进去
# 按`ESC`退出编辑模式
# 输入英文的`:wq`写入文件并退出到命令行

#并赋予相应的权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh

第二步,修改服务器SSH配置文件,如果觉得用vim比较不习惯可以用scp复制到本地,用界面化的应用(类似VS Code)编辑后再重新复制回去,注意保存备份!

# 编辑配置文件
vim /etc/ssh/sshd_config

# 将服务器文件复制到本地电脑
scp [email protected]:/etc/ssh/sshd_config /Users/keen/Downloads

# 将本地文件复制到目标服务器
scp /Users/keen/Downloads/sshd_config  [email protected]:/etc/ssh/

配置修改的内容如下,重点是一定要打开RSA认证,允许公钥验证,至于是否允许密码登录看个人喜好了。其他的配置都是锦上添花,不配置也无妨的。

# RSA验证
RSAAuthentication yes

# 公钥校验
PubkeyAuthentication yes

# 指定公钥文件
AuthorizedKeysFile .ssh/authorized_keys

# 允许密码登录
PasswordAuthentication yes

# 保持长时间的链接
ClientAliveInterval 60
ClientAliveCountMax 3

# 最大允许链接数,默认10
MaxSessions 1000

# 最大允许保持多少个未认证链接(未输入登录密码),默认值是10
MaxStartups 10

第三步,重启sshd服务,让配置生效。

systemctl restart sshd.service

成功效果

如果不需要输入密码出现这个画面,证明成功。

ssh root@server_ip
image-20210526233237964

本地配置多个私钥

如果你跟我一样是有多个服务器需要同时配置SSH密钥免密码登录,那么你就可以看看这个配置。

再生成一个 Gitlab 用的密钥对,其中 gitlab_id_rsa 为密钥的文件名,~/.ssh/gitlab_id_rsa 为密钥目录位置。

ssh-keygen -t rsa -C '[email protected]' -f ~/.ssh/gitlab_id_rsa

新建配置文件~/.ssh/config,来指定哪个服务器使用哪个密钥。

touch ~/.ssh/config

其中文件内容如下。

# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

# gitlab
Host gitlab.com
HostName gitlab.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitlab_id_rsa

# 如果生成多个 SSH-Key , 则按上面的格式继续往下写
  • Host:服务器的域名或者IP
  • HostName:服务器的域名或者IP
  • IdentityFile 指定私钥的路径,在生成 SSH-Key 时,我们已经指定该路径,拷贝过来即可

注意:需要给配置文件指定权限!

Mac系统直接使用命令即可指定配置文件的权限。

sudo chmod 600 ~/.ssh/id_rsa

Windows系统,在id_rsa文件上右击,选择路径为属性-安全-高级,点击窗口左下角的禁用继承,然后删除权限条目里除自己以外的人。

断开SSH

在本地终端断开ssh连接而不关闭终端窗口的方法有两个。

  • 法1:快捷键Ctrl+D

  • 法2:输入命令logout

重新连接

如果在重置了远程服务器后,由于.ssh/known_hosts中的信息不匹配,会出现如下警告。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:Vg0673orrEkccGdVfQzK8viE/V+rv9DxceMgIBaIdik.
Please contact your system administrator.
Add correct host key in /c/Users/Administrator/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /c/Users/Administrator/.ssh/known_hosts:6

解决方案有两个,你可以运行命令选择性删除,也可以直接删除known_hosts文件。

ssh-keygen -R 39.96.12.167
  • -R:从 known_hosts 文件中删除所有属于 39.96.12.167 的密钥信息。

感谢

感谢现在的坚韧,为了能成为更好的自己。

感谢过去好奇的我,给现在的我留下来这么大的工作量!

Linux下使用vim命令编辑与修改文本内容

一次性把 Hexo 博客部署到自己的服务器

远程连接到Linux操作系统实例

linux 中chmod命令使用的详细解释

SSH 远程登录错误解决办法 WARNING: REMOTE

你可能感兴趣的:(Hexo历险记之八SSH远程链接服务器)