SSH远程登录

SSH远程登录

六月 25, 2021 阅读量

SSH远程登录

起因是服务器在儿童节那天数据库连不上了,原因是中了之前横行的勒索病毒的变种……然后就有了后来的各种加强:windos变更为linux,通过SSH连接等等,这里就简单梳理一下SSH的相关知识

什么是SSH

SSH (Secure Shell 安全外壳协议)是为远程登录会话和其他网络服务提供安全性的网络协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题,即使被中途截获,密码和数据也不会泄露。可以防止中间人(man-in-the-middle)攻击。

口令登录

之前的deepin使用的是OpenSSH,默认使用口令的安全验证,就是只有账号和口令就可以登录远程主机。因为之前改过端口,需要同通过参数-p来指定端口。

1
ssh [email protected] -p 122

第一次登录时,会提示你确认主机的真实性,yes后会提示你输入密码,如图

私钥登录

现在改为基于密匙的安全验证,通过一对密钥进行安全认证。

执行ssh-keygen生成公钥和私钥,公钥(通常做法是使用-t参数,指定密钥的加密算法,如dsa rsa),生成时会询问一些问题,一般默认回车就好,这里设置私钥密码。
第一个问题询问密钥保存的文件名。

Enter file in which to save the key (/root/.ssh/id_rsa):

第二个问题询问私钥是否设定密码保护,直接回车就默认为空。这里设置,然后再确认一遍密码。

Enter passphrase (empty for no passphrase):

id_rsa 生成的私钥文件
id_rsa.pub 生成的公钥文件

1
2
#修改sshd_config
vim /etc/ssh/sshd_config

修改如下

#root用户登录
PermitRootLogin yes

#密钥认证
PubkeyAuthentication yes

#密码认证(可以关闭,关闭后只能通过密钥进入)
PasswordAuthentication yes

1
2
#重启SSH
systemctl restart sshd
1
2
#私钥登录,把远程主机的私钥发放给客户端用户
ssh [email protected] -p 122 -i C:/Users/xuchl/.ssh/deepin_rsa

因为我有设置私钥密码,这里需要输入私钥密码。

公钥登录

公钥登录,要客户端公钥写入远程主机authorized_keys文件中,这里直接复制粘贴的,试了几个linux命令都没有实现。

1
2
#修改sshd_config
vim /etc/ssh/sshd_config

修改如下

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

1
2
#修改文件权限
chmod 600 ~/.ssh/authorized_keys

PS:这里的文件使用root用户建的,其他用户通过密钥登录的话还需要再输入一遍密码

1
2
#公钥登录
ssh [email protected] -p 122

本地端口转发

本地1和服务器2无法直接连接,但是中继3可以连接1和2,1通过3连上2。本地1到中继3形成数据传输的秘密隧道,即SSH隧道。

1
2
#本地1执行(本地1端口:服务器2:服务器2端口 中继3)
ssh -L 1121:192.168.112.128:122 192.168.112.3
1
2
#通过本地的1121端口就可以直接登录服务器
ssh -p 1121 root@localhost

远程端口转发

本地1和服务器2无法直接连接,并且本地1无法连接中继3,但是中继3可以连接1和2,1通过3连上2。
额,这个没成功,win10连不上,不保证正确。

1
2
#中继3执行(中继3端口:服务器2:服务器2端口 本地1)
ssh -R 1122:192.168.112.128:122 192.168.88.27

示例:通过SSH通道连接MariaDB

1
2
3
4
#通过Docker拉取最新MariaDB镜像
docker pull mariadb
#简单创建容器并启动
docker run --name mariadb -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 mariadb:latest

通过SSH通道登录数据库