我正在尝试建造一条隧道。
当我运行命令时
ssh [user]@[host] -p [port] -L [localport]:[ip]:[port2] -N -vv -y -i /home/glab/.ssh/id_rsa
隧道启动了。但问题是,一段时间后它就停止工作了。
然后我发现我需要 autossh。尝试了这个,然后尝试了 Supervisor。没有任何帮助。
在 var/log/syslog 文件中,我看到很多日志,其中最先出现的是:
Oct 21 07:40:01 localhost autossh[17521]: starting ssh (count 8)
Oct 21 07:40:01 localhost autossh[17521]: ssh child pid is 17541
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: debug1: Reading configuration data /etc/ssh/ssh_config
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: debug1: /etc/ssh/ssh_config line 19: Applying options for *
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: debug2: ssh_connect: needpriv 0
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: debug1: Connecting to [ipaddress] [ipaddress] port [port].
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: debug1: Connection established.
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: error: buffer_get_ret: trying to get more bytes 4 than in buffer 0
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: error: buffer_get_string_ret: cannot extract length
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: error: key_from_blob: can't read key type
Oct 21 07:40:01 localhost /usr/bin/ssh[17541]: error: key_read: key_from_blob \n failed
我搜索这个错误的含义:
http://www.brandonchecketts.com/archives/ssh-error-trying-to-get-more-bytes-4-than-in-buffer-0
问题实际上是用户 ~/.ssh/authorized_keys 文件中的一行损坏了。此用户将新密钥复制/粘贴到其 authorized_keys 文件中,并且在 ssh-rsa 后有一个换行符。奇怪的是,如果密钥位于损坏行上方,人们仍然能够进行身份验证。密钥位于损坏行下方的用户无法登录。
我的 .ssh 目录中没有 authorized_keys 文件。但也有一条评论说,这个问题可能是因为 known_hosts 在文件末尾有换行符。
然后我检查是否有新行:
cat -A known_hosts
我在那里看到了 $ 符号,我不确定,也许这意味着换行,也许不是。但是当没有 -A 参数运行时,没有 $ 符号。
我尝试跑步
truncate -s $(($(stat -c '%s' known_hosts)-1)) foo
删除新行,如下所示:https://stackoverflow.com/questions/16365155/removing-a-newline-character-at-the-end-of-a-file
但没有帮助。
如何解决这个问题?
答案1
发现远程服务器文件 authorized_keys 有问题 - 一个密钥有多行
https://wiki.mcs.anl.gov/IT/index.php/SSH_Keys:authorized_keys
不知道为什么会这样。删除了原本不应该出现的行尾后,问题就解决了。
答案2
对我来说,~/.ssh/known_hosts
本地系统上的这个功能很糟糕。我删除了它,然后重新连接到所有服务器,没有任何问题。