Linux SSH协议

ssh 协议

ssh 是一个加密的应用层的协议,在当前互联网时代,它被广泛的应用。比如我们使用 puttyxshell 等软件连接上 Linux 的终端,其实它背后的通信,使用的就是 ssh 协议。还有很多协议,也是基于 ssh 的实现,比较有名的 openSSH,我们连接到 github … 等等的背后都是 ssh,所以有必要细致了解一下。

ssh 命令

这个命令能让我们使用 ssh 协议连接到远程 Linux 主机。

1
ssh 用户名@IP地址 // 例如 ssh root@0.0.0.0,之后根据提示输入密码就可以

断线reconnect

使用ssh时,服务器一般默认会有timeout设置,经常才几分钟没操作就被自动断线了,不能进行任何操作,可以通过以下两种方法解决。

修改config实现心跳检测

心跳检测分为客户端和服务端两种:

  1. 依赖ssh客户端定时发送心跳检测,配置/etc/ssh_config文件,在末尾添加上:

    1
    2
    ServerAliveInterval 20  #每隔20秒向服务器发出一次心跳检测
    ServerAliveCountMax 999 #若超过999次请求都没有成功,就主动断开与服务器端的连接
  2. 依赖ssh服务器端定时发送心跳检测,配置/etc/sshd_config文件,在末尾添加上:

    1
    2
    ClientAliveInterval 20  #每隔30秒向客户端发出一次心跳检测
    ClientAliveCountMax 999 #若超过6次请求都没有成功,就会主动断开与客户端的连接

设置了ssh的心跳检测后,重启ssh服务才能生效,执行命令

1
service ssh restart

使用autossh工具

使用 ssh 连接到远程终端,有时会因为网络不稳定而断开连接,使用 autossh 这个工具可以解决我们这个问题。它会在建立一个新的端口然后监测我们的服务,如果发生我们的服务断开了,会自动修复。

1
autossh -M 5678 用户名@IP // 开启端口:5678\监听ssh状态

公钥

还有一个问题,我们每次使用 ssh 连接到远程服务器,都需要密码,省略这个步骤,可以通过给目标服务器配置一个 公钥。就像我们初次使用 Github,它也要求我们要配置一个 ssh 都公钥一样,之后就可以省略密码。

1
$ ssh-keygen // 生成公钥

生成的文件在 ~/.ssh 这个目录里面,id_rsa.pub 是公钥,id_rsa 是私钥。我们打开 id_rsa.pub,把里面都信息复制到目标服务器的 ~/.ssh/authorized_keys,这样就能获得目标服务器的信任。

隧道

ssh 协议还有另外一个特别好用到功能 隧道,它能帮助我们代理转发些东西。举个容易理解到例子,一般我们的宽带是没有提供外网IP的,这就说明,我们是不能通过网络访问到我们家里到电脑,但是如果利用 ssh 隧道,就能做到这一点。但完成这个步骤的前提,必须是要有一个可以访问外网的第三方的主机。通信的流程是这样的,外网 - 第三方主机 - 家里的网络。这台第三方的主机就相当于一个跳板,作为我们访问家里的代理服务器。

1
autossh -f -N -C -R 0.0.0.0:2222:127.0.0.1:22 root@1.2.3.4

上面这条命令,通过家里的服务器去执行,我们使用 autossh 保证了连接不被断开。它的意思是,ssh 到 1.2.3.4:2222 这个地址,就能与家里的服务器连通。

感谢您的阅读,本文由 雪释潮涯的博客~ 版权所有。如若转载,请注明出处: 雪释潮涯的博客~( https://www.xschaoya.com
IO模式及select-poll-epoll理解

推荐阅读

留下足迹