我有两个 RH Linux 主机,所有东西都相同,称为 A 和 B。
我可以使用公钥从 A 顺利地 ssh 到 B,但我就是无法从 B 登录到 A(或者从我的桌面使用 putty 和 pageant 登录),因为系统会提示输入密码。似乎 A 肯定有些不同,但我搞不清楚是什么。
authorized_keys 文件和 .ssh 目录权限正确且 sshd_config 中的 PubkeyAuthentication 为“是”。
是否还有其他东西可能缺失或基础构建中可能已更改,从而导致这种情况发生?我已经反复检查上述内容并多次重新生成密钥。我还看到它在运行 ssh -v A 时尝试使用密钥,但失败了。
答案1
如果可以的话,您需要在服务器上调试此问题。如果您在服务器上具有 root 访问权限,请尝试成为 root,然后运行:
/path/to/sshd -ddd -p 1022
这将运行 SSH 服务器的一个实例,该实例将侦听端口 1022、接受一个连接并将调试信息打印到您的终端。照常运行您的客户端,但指定端口 1022 作为端口:
ssh -p 1022 user@A
服务器打印的调试信息有望清楚地说明您被拒绝的原因。
答案2
我可以使用公钥从 A 顺利地 ssh 到 B,但我根本无法从 B 登录到 A...而无需输入密码。
要从 X 到达 Y,X 的公钥必须位于 Y 的 authorized_keys 文件中
运行 ssh 命令从 A 到 B,需要输入密码,例如
$ssh user@host
然后按 Ctrl-C,这样您就知道您拥有正确的 ssh 命令,因此它会提示输入密码。
但这次,ssh
改变ssh-copy-id
它会提示输入密码。输入密码。现在退出。
然后下次您通过 ssh 登录时,它就会自动登录。
为了使其工作你必须有 A 上的钥匙。
如果你还没有 A 上的密钥,则运行 $ssh-keygen
然后ssh-copy-id
按照描述进行操作。
在从 A 连接到 B 时,这里提到的所有命令,例如 ssh、ssh-copy-id 或 ssh-keygen,都是从 A 运行的。
答案3
请检查 iptables 是否已配置为允许传入 ssh 访问
iptables --list
它将列出现有的 iptable 规则
您可以使用以下命令仅允许来自特定网络的传入 SSH
iptables -A INPUT -i eth0 -p tcp -s 192.168.200.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
希望这可以帮助!