我们经常通过 ssh/scp 免密登录的方式来自动化的批量执行一些操作, 不过在实际的使用中可能经常碰到下面几种中断自动连接的问题.
目前主要由以下几方面问题会引起连接中断:
在连接新的机器的时候, 通常需要将新机器的加密指纹信息添加到自身的 ~/.ssh/known_hosts 中. 如下所示, 这种提示需要我们手动确认, 会暂停自动登录操作, 即便新机器保存着连接机的公钥信息.
$ ssh newhost
The authenticity of host 'newhost (10.0.1.2)' can't be established.
ECDSA key fingerprint is SHA256:+PmcUMRVQIccL3N7WEkjRuZ5B5iyyVJDV2MGekPXCoo.
ECDSA key fingerprint is MD5:5a:eb:33:c8:ae:be:b0:d7:f0:ec:e3:a2:d8:92:2e:77.
Are you sure you want to continue connecting (yes/no)?
可以通过 expect 等工具处理此提示, 也可以通过设置 ssh/scp 选项跳过确认过程而直接登录新机器, 如下所示:
$ ssh -o StrictHostKeyChecking=no newhost
Warning: Permanently added '10.0.1.2' (RSA) to the list of known hosts.
Last login: Fri Feb 14 03:53:33 2020 from 10.0.1.10
[cztest@cz ~]$
StrictHostKeyChecking=no 选项会忽略确认过程, 自动将指纹信息加到 ~/.ssh/known_hosts 中.
这种问题通常在重新初始化远程机器的时候, 比如重装机器, ssh 的指纹信息变更, 如下所示:
$ ssh newhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
......
......
Host key verification failed.
该问题同样可以通过 StrictHostKeyChecking=no 选项解决:
$ ssh -o StrictHostKeyChecking=no newhost
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
......
......
Last login: Sat Feb 15 09:26:58 2020 from 10.0.1.10
[cztest@cz ~]$
在执行一些比较重的操作的时候, 可能会出现连接超时断开的情况, 这种问题一方面可能是因为操作确实费时, 操作等待的时间过长, 也有可能是因为一些代理中间件(比如 haproxy) 的连接超时设置而引起中断. 这些本质上都是因为 tcp 连接长时间没有通信引起的, 可以通过以下选项对连接进行保活:
ssh -o ServerAliveInterval=60 -o ServerAliveCountMax=20 server
上面的选项每 60s 发送一次保活信息, 最多发送 20 次. 实际使用中可以按需调整这两个参数.
另外, 有的机器设置了一些超时参数避免长时间不操作而占用连接的情况, 如下所示:
TMOUT=600
readonly TMOUT
TMOUT 可以用来控制连接的输入行为, 在交互式中很有用. 上面将 TMOUT 设置为只读变量, 所有连接到此机器的连接在 10 分钟内没有 read(bash buildin, 比如没有输入命令) 操作则断掉连接. 这种情况无法通过 ssh 的选项来避免, 可以通过一些 ssh 的工具避免此类问题, 比如 SecureCRT 工具的 session options -> Terminal -> Anti-idle 功能指定每隔一定时间对连接的会话发送一些特殊字符来避免 TMOUT 引起的中断.
实际的使用中可以通过对 ssh/scp 增加以下选项尽量避免自动登录失败:
-o ServerAliveInterval=60 -o ServerAliveCountMax=20
-o StrictHostKeyChecking=no -o PasswordAuthentication=no
-o BatchMode=yes -o ConnectTimeout=8
在启用 BatchMode 的时候, ssh/scp 会忽略输入密码的提示, 这点在批量操作的时候很有用. 另外也可以将上面的选项增加到 ~/.ssh/config 配置中, 如下所示:
Host *
GSSapiAuthentication no
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
ForwardAgent yes
TCPKeepAlive yes
ServerAliveInterval 60
ServerAliveCountMax 20
StrictHostKeyChecking no
PasswordAuthentication no
BatchMode yes
ConnectTimeout 8
ControlMaster 和 ControlPath 两个选项控制 socket 的文件路径信息方便 agent 方式复用 socket 文件登录机器, 更多可以参考 ssh-agent .
原文 https://blog.arstercz.com/ssh_scp-auto-connect-note/
用过ssh的朋友都知道,ssh key的类型有很多种,比如dsa、rsa、 ecdsa、ed25519等,那这么多种类型,我们要如何选择呢?今天看到一篇相关文章,写的挺好的,在这里分享下。
ssh是我使用最频繁的两个命令行工具之一(另一个则必须是vim)。有了ssh,我可以远程处理各种可能出现的问题而无需肉身到现场。这几天teamviewer被黑的事情影响挺大,于是由远程控制想到了内网穿透
SSH key 可以让你在你的电脑和Code服务器之间建立安全的加密连接。 先执行以下语句来判断是否已经存在本地公钥:如果你看到一长串以 ssh-rsa或 ssh-dsa开头的字符串, 你可以跳过 ssh-keygen的步骤。
想来占有量最大的操作系统,得非莫属了吧,相信 Windows 系统肯定是陪伴了很多小伙伴学习工作很长时间的系统了,不过笔者之所以会写这篇文章,也是由于 xshell这个软件破解的有限以及收费限制
SSH 隧道或 SSH 端口转发可以用来在客户端和服务器之间建立一个加密的 SSH 连接,通过它来把本地流量转发到服务器端,或者把服务器端流量转发到本地。
如果你是一名站长或者需要进行管理远程服务器的话,相信你肯定需要用到SSH连接软件。SSH客户端就是可以使用SSH进行远程连接服务器的应用程序。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!