【问题标题】:SSH - Help understanding proxy commandSSH - 帮助理解代理命令
【发布时间】:2017-01-18 19:29:47
【问题描述】:

我正在尝试调试一个似乎由于 SSH 权限问题而失败的Jenkins Plugin。基本上,该插件允许我从主机通过 SSH 连接到从机上构建的特定 Jenkins,但由于某种原因,它在我尝试使用它的系统上失败。

执行时,插件告诉我可以使用类似以下命令从主机通过 SSH 连接到从站构建:

ssh.config

Host=*.localhost
Port=43689
ProxyCommand=ssh -p 43689 localhost diagnose-tunnel -suffix .localhost %h

命令:

ssh -F ssh.config Test.localhost

这适用于我设置的测试系统(使用两台机器),但在生产环境中失败并出现错误 Permission denied (publickey)

虽然我当然愿意自己调试权限问题,但我真的很困惑这个 ssh 命令是如何工作的:/它到底想做什么?我研究了这个问题,但我仍然对它如何与代理命令一起使用感到困惑。

我想它连接到本地主机(jenkins 主机)中的某个自定义端口,但这将如何让我通过 ssh 进入从机?为了便于阅读,这条命令可以改写成一行吗?什么可能导致权限被拒绝错误?

感谢您的帮助!我想这可能是一个非常简单的问题,但我是 SSH 新手,仍在努力理解它:)

更新

ssh -vF test_ssh <job>.<host> 的输出,根据要求! ^^(为了便于阅读,将作业和主机替换为标签)

OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data test_ssh
debug1: Applying options for *.<host>
debug1: Executing proxy command: exec ssh -p 44078 <host> diagnose-tunnel -suffix .<host> <job>
debug1: permanently_drop_suid: 497
debug1: identity file /var/lib/jenkins/.ssh/identity type -1
debug1: identity file /var/lib/jenkins/.ssh/identity-cert type -1
debug1: identity file /var/lib/jenkins/.ssh/id_rsa type 1
debug1: identity file /var/lib/jenkins/.ssh/id_rsa-cert type -1
debug1: identity file /var/lib/jenkins/.ssh/id_dsa type -1
debug1: identity file /var/lib/jenkins/.ssh/id_dsa-cert type -1
debug1: identity file /var/lib/jenkins/.ssh/id_ecdsa type -1
debug1: identity file /var/lib/jenkins/.ssh/id_ecdsa-cert type -1
Permission denied (publickey).
ssh_exchange_identification: Connection closed by remote host

【问题讨论】:

  • 您是否在 prod 服务器上注册了您的公共 ssh 密钥?
  • 感谢您的回复!我刚刚检查了密钥,并且我在从机的 authorized_keys 文件中拥有来自主机的公钥。我似乎能够毫无问题地通过 ssh 进入从机,但正是 ssh -p 43689 localhost 在生产设置上给我带来了权限被拒绝错误的问题:/ 我尝试将主机上的 id_rsa.pub 添加到同一台机器上的 authorized_keys机器,但它仍然没有真正工作......
  • '权限被拒绝'或'连接被拒绝'?你确定有人在监听 43689 端口吗?
  • 绝对权限被拒绝!我刚刚检查了活动端口,该端口确实在监听。
  • 谁在监听这个端口?哪个用户拥有监听此端口的进程?

标签: linux jenkins ssh proxy


【解决方案1】:

您的 ssh.config 还应该包含类似

的内容
User USERNAME
PubKeyAuthentication yes
IdentityFile /path/to/key

USERNAME 是允许连接到您的产品服务器的实际用户,/path/to/key 是他们的私有密钥,在此之前您应该已经完成​​了

ssh-copy-id -i /path/to/key.pub SERVER

SERVER 是您的产品主机

【讨论】:

    【解决方案2】:

    我也遇到了同样的问题..

    现在,我会尽力回答你。

    它到底想做什么?

    ssh -p <port> <server> diagnose-tunnel -suffix .<server> %h
    

    diagnose-tunnel -suffix .&lt;server&gt; %h 是在&lt;server&gt;:&lt;port&gt; 上执行的命令。据我了解,这是 Jenkins 的特定命令,有助于建立与从节点的连接。

    权限被拒绝(公钥)。

    有帮助我的解决方案:

    1. 通过以下方式生成私钥和公钥 ssh-keygen;
    2. 将公钥 (id_rsa.pub) 复制到您的用户设置 (http://&lt;jenkins_server&gt;:8080/user/&lt;jenkins_user_name&gt;/configure);
    3. 编辑~/.ssh/config 文件:您应该将jenkins_user_name 添加到ProxyCommand 行:

      ProxyCommand ssh -p &lt;port&gt; &lt;jenkins_user_name&gt;@&lt;jenkins_server&gt; diagnose-tunnel -suffix .&lt;jenkins_server&gt; %h

    4. 另外还要加上User &lt;jenkins_user_name&gt;IdentityFile /path/to/private_key@sotona的写法

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-29
      • 2010-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多