SSH问题汇总

SSH agent 登录失败问题

如果当前系统已经启用 SSH agent,对于没有启用证书登录的主机来说,ssh 或者 scp 登录时可能会不提示输入用户名和密码却直接报 Too many authentication failures 错误:

zzm@ZZM-P238:~$ ssh root@192.168.1.199
Received disconnect from 192.168.1.199: 2: Too many authentication failures for root

此时可以:

  • unset SSH_AUTH_SOCK 再登录;

  • ssh 或 scp 登录时增加 -o IdentitiesOnly=yes 参数;

  • 增加服务端 MaxAuthTries 参数(默认为 6)。

证书文件权限问题

SSH 私钥证书文件权限较高时,ssh 命令可能会报如下错误:

WARNING: UNPROTECTED PRIVATE KEY FILE!
Permissions 0644 for 'XXX' are too open.

如果不能修改证书文件权限,可以 sudo 切换为其它用户进行 ssh 连接:

~# sudo -u nobody ssh -i XXX root@IP

支持老的加密方式

可以修改 ssh_config 配置文件或通过命令参数支持老的加密方式:

Host *
    HostkeyAlgorithms +ssh-rsa,ssh-dss
    PubkeyAcceptedAlgorithms +ssh-rsa,ssh-dss
    PubkeyAcceptedKeyTypes +ssh-rsa,ssh-dss

如果单独运行新版本的 ssh 命令连接一些老的系统,可能出现类似下面的报错:

Unable to negotiate with 192.168.1.112 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

此时 ssh 命令需要增加参数支持老的加密方式:

~# ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa root@Server-IP

sftp 自定义端口

如果运行 sftp 命令连接非 22 端口的 SFTP 服务器,可以:

sftp -oPort=2222 root@Server-IP