PuTTY 使用代理转发进行服务器链

PuTTY 使用代理转发进行服务器链

我无法使用 PuTTY 配置 AgentForwarding :(

PuTTY 是最新的 0.61 版本。我为 PuTTY 创建了公钥/私钥对,将它们转换为 openssh 格式,并将它们添加到 host1 和 host2 上的 /root/.ssh/authorized_keys 中。在两个主机上的 /etc/ssh/sshd_config 中:

PermitRootLogin without-password
AuthorizedKeysFile      %h/.ssh/authorized_keys
AllowAgentForwarding yes

在两台主机上,/root/.ssh/config 包含

Host *
    ForwardAgent yes

在 PuTTY 配置中,选项 Connection/SSH/Auth/Allow agent forwarding [x] 被选中。

当我运行已加载密钥文件的 pagent.exe 时,我可以无需密码连接到 host1 和 host2。但是当我连接到 host1 并尝试时ssh root@host2,系统提示我输入密码。我的 host1 会话中未设置变量 $SSH_AUTH_SOCK。我做错了什么?

答案1

由于未设置 $SSH_AUTH_SOCK,因此很可能是 putty/pagent 或 sshd 本身的问题。

您可以非常轻松地将 sshd 置于调试模式。登录服务器(这可以通过 ssh 安全地完成,只要您记得在完成后重新启动 sshd)并停止 sshd(通过您的 init 脚本)。然后运行:

/usr/sbin/sshd -Dddd

(-D 表示前台模式,-ddd 表示详细调试)

尝试再次通过 putty 连接,并观察 sshd 的输出。如果 putty 正在发送代理转发的密钥,您应该会看到一些关于[电子邮件保护]。如果您没有看到该信息,则 Putty 没有正确发送密钥以进行代理转发/请求代理转发。

这应该可以缩小问题的范围。您还可以在尝试 ssh 到 host2 时从 host1 运行“ssh -vvv”以获取详细的调试输出。

(此时,请记住按 ctrl+C 键关闭前台 sshd 进程并从您的初始化脚本重新启动它,否则您将被锁定在服务器之外!)

答案2

问题出在screen应用程序中。它是通过 PuTTY 在远程主机上使用screen -d -RR(Connection/SSH/Remote Command) 启动的。我找到了解决方案这里并稍微修改了一下:

〜/ .bashrc:

# Correct screen and tmux behavior with ssh-agent
parent="$(ps -o comm --no-headers $PPID)"

case $parent in
sshd)
        keep_vars="SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION DISPLAY XAUTHORITY"
        touch $HOME/.ssh/keep_vars
        chmod 600 $HOME/.ssh/keep_vars
        for i in $keep_vars; do
                 (eval echo export $i=\\\'\$$i\\\')
        done > $HOME/.ssh/keep_vars
;;
screen|tmux)
        source $HOME/.ssh/keep_vars
;;
esac
# This command must be run from shell within detached and re-attached screen session
# to interact with ssh-agent properly
alias fixssh="source $HOME/.ssh/keep_vars"
alias ssh="source $HOME/.ssh/keep_vars; ssh"

每次我连接时,ssh 代理变量都存储在 中$HOME/.ssh/keep_vars。screen 中每个新打开的窗口都可以立即使用我的密钥连接到其他机器 - 它从 screen 接收适当的变量。在旧的 windows 中,我需要输入fixssh然后尝试连接。

答案3

我声称 Putty 使用的密钥与加载到 Pageant 中的密钥不同。在密钥上设置密码,将其加载到 Pageant 中,然后查看 Putty 在连接时是否仍要求输入密码。

相关内容