SSH-解决连接自动断开

在使用SSH客户端进行连接管理的时候如果长时间不输入命令,服务器会自动断开连接,尤其是利用代理进行SSH连接时情况更突出。

Bad packet length 2165930639.
padding error: need -2129036657 block 8 mod 7
ssh_dispatch_run_fatal: Connection to UNKNOWN: message authentication code incorrect

——————————————————————————-
这样连接上去,利用代理,会经常掉线。
后来,我提权 ,用sudo ,以root 身份运行就 不会掉线了,奇怪了啊。
记得 用 root 身份连接 +
打开服务器 /etc/ssh/sshd_config,我在最后增加一行
ClientAliveInterval 60
ClientAliveCountMax 1
(可能我在 ~/.ssh/ssh_config 文件里配置了
TCPKeepAlive yes
ServerAliveInterval 30
前一个参数是说要保持连接,后一个参数表示每过30秒发一个数据包到服务器表示“我还活着”。可能这地方也需要配置下吧。)
这样实际使用中 的确 可以 保持 很长的连接。
(操作 环境 mac下 使用root账户 操作 SSH , 并以root用户登入到远程 centos 主机中 )

重要信息:经过测试:

# 在 ~/.ssh/ssh_config 文件(即当前用户的SSH配置文件中) 配置了下面参数
#1、保持 tcp 连接
TCPKeepAlive yes
#2、每过30秒发一个数据包到服务器表示"我还活着"
ServerAliveInterval 30
# 经过测试,用本机当前用户 进行 SSH远程连接操作 也没有问题。不会掉线了。

其他方法也有,比如用 screen 恢复 ssh 会话。
*********************************************************************

后面提到的方法都已经单独试过了,感觉 没有 效果。
——————————————————————————-
针对这种情况,我在网上搜集了可以让 SSH 保持连接的方法与大家分享
在服务器端, 可以让服务器发送“心跳”信号测试提醒客户端进行保持连接
通过修改 sshd 的配置文件,能够让 SSH Server 发送“心跳”信号来维持持续连接,下面是设置的内容
打开服务器 /etc/ssh/sshd_config,我在最后增加一行
ClientAliveInterval 60
ClientAliveCountMax 1
这 样,SSH Server 每 60 秒就会自动发送一个信号给 Client,而等待 Client 回应,(注意:是服务器发心跳信号,不是客户端,这个有别于一些 FTP Client 发送的 KeepAlives 信号哦~~~),如果客户端没有回应,会记录下来直到记录数超过 ClientAliveCountMax 的值时,才会断开连接。
如果你没有服务器端管理权限, 在客户端进行设置也可以实现
只要在/etc/ssh/ssh_config文件里加两个参数就行了
1 TCPKeepAlive yes
2 ServerAliveInterval 300
前一个参数是说要保持连接,后一个参数表示每过5分钟发一个数据包到服务器表示“我还活着”
如果你没有root权限,修改或者创建~/.ssh/ssh_config也是可以的
在这种方法中, 如果你只想针对某一个ssh连接进行持续, 你可以将上述配置文件复制一下进行修改然后在连接的时候使用 -F参数进行配置文件的指定。 当然因为只需要修改两个参数, 你也可以直接在连接命令中进行设定即:
ssh -o TCPKeepAlive=yes -o ServerAliveInterval=300 [email protected] -p 12345678

——————————————————————————-
有可能是 网络问题,杀毒软件导致 端口被占,收到的 数据包 出错
Found the cause for my problem by accident. I tried to use an old trick and started a System Recovery to undo my Git installation. It failed because of my Virus Scanner. After uninstalling Bitdefender Antivirus Free Edition it worked. Incoming SSH2 messages were blocked (got Windows 8 Pro) which caused the bad packet length error. Anyway, thanks for your support!
——————————————————————————–
有可能是 一开始 验证密钥文件 时,密钥文件 默认名字可能是其他服务器的密钥 ,所以尽量重命名,指定服务器需要的密钥
save the keys in C:\Users\myUserName\.ssh\keyName
Your local ssh command would look for ssh keys in %HOME%\.ssh\id_rsa(.pub).

So you need to either:

rename the local files representing your ssh (public and private) keys
or reference those through a %HOME%\.ssh\config which can reference the exact name of your private key (with an IdentityFile directive).

Host gitlab
user git
hostname your.gitlab.server.com
IdentityFile C:\user\YourUsername\.ssh\keyName

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments