仅在Screen会话内SSH到本地主机时出现“Unable to negotiate a key exchange method”错误
嘿,我来帮你排查这个只在Screen会话里出现的SSH问题!这种场景特定的错误确实有点棘手,咱们从几个不用改服务器设置的方向试试:
先排查环境变量差异
Screen有时候会重置或继承不一样的环境变量,这可能影响SSH的密钥交换流程。你可以先在正常的shell(非Screen)里跑一遍:env | grep SSH然后打开Screen会话再跑一遍同样的命令,对比两者的输出。重点看
SSH_AUTH_SOCK这类和SSH认证相关的变量——如果Screen里的路径和正常shell不一样,就可能导致密钥交换失败。要是发现差异,你可以在~/.screenrc里添加一行配置来同步环境变量,比如:setenv SSH_AUTH_SOCK /path/to/your/normal/socket把路径换成你正常shell里
SSH_AUTH_SOCK对应的真实值就行,改完重启Screen再试试。手动指定兼容的密钥交换方法
既然是共享服务器没法改全局设置,咱们可以在SSH命令里强制指定服务器支持的密钥交换算法。先在正常shell里用 verbose 模式连接本地主机,看看服务器支持哪些方法:ssh -v your-local-host输出里找类似“key exchange methods offered”的部分,记下那些服务器支持的算法(比如
diffie-hellman-group1-sha1、ecdh-sha2-nistp256这类)。然后在Screen里用这个命令连接:ssh -o KexAlgorithms=你记下的算法 your-local-host要是成功的话,你还可以把这个配置写到
~/.ssh/config里,以后不用每次手动输入:Host your-local-host KexAlgorithms 你记下的算法调整Screen的终端配置试试
虽然可能性稍小,但Screen的终端类型设置也可能间接影响SSH连接。你可以在~/.screenrc里添加一行:term xterm-256color保存后重启Screen,再尝试SSH连接看看有没有改善。
备注:内容来源于stack exchange,提问作者blackfyre

