我正在尝试建立一个隧道。
当我运行命令
ssh [user]@[host] -p [port] -L [localport]:[ip]:[port2] -N -vv -y -i /home/glab/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)
隧道开始。但问题是它在一段时间后停止工作。
然后我发现我需要 autossh。尝试过这个,然后与主管一起尝试。没有任何帮助。
在 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
Run Code Online (Sandbox Code Playgroud)
我搜索此错误的含义:
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
Run Code Online (Sandbox Code Playgroud)
在那里我看到了 $ 符号,我不确定,也许这意味着换行,也许不是。但是在没有 -A 参数的情况下运行时,没有 $ 符号。
我试过跑步
truncate -s $(($(stat -c '%s' known_hosts)-1)) foo
Run Code Online (Sandbox Code Playgroud)
删除新行,如所写:https : //stackoverflow.com/questions/16365155/removing-a-newline-character-at-the-end-of-a-file
但没有帮助。
如何解决这个问题?
发现远程服务器文件中的authorized_keys 是错误的——一个密钥有多行
https://wiki.mcs.anl.gov/IT/index.php/SSH_Keys:authorized_keys
不知道为什么会这样。在删除了它们不存在的行尾后,问题就解决了。