SSH - 帮助理解代理命令

时间:2016-03-18 10:17:03

标签: linux jenkins ssh proxy

我正在尝试调试由于SSH权限问题而导致失败的Jenkins Plugin。基本上,插件允许我从主机SSH到从机上的特定Jenkins构建,但由于某种原因,它在我试图使用它的系统上失败。

执行时,插件告诉我,我可以使用类似以下命令的东西从主机连接到从属构建中:

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命令的工作原理感到困惑:/它究竟要做什么?我研究了这个问题,但我仍然对如何使用代理命令感到困惑。

我想它连接到localhost(jenkins主机)中的某个自定义端口,但是这怎么会让我ssh到slave机器?为了便于阅读,可以将此命令重写为一行吗?什么可能导致权限被拒绝错误?

感谢您的帮助!我想这可能是一个非常简单的问题,但我是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

2 个答案:

答案 0 :(得分:0)

你的ssh.config也应包含类似

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

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

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

其中SERVER是你的prod主机

答案 1 :(得分:0)

我有同样的问题..

现在,我会试着回答你。

  

它到底想要做什么?

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

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

  

许可被拒绝(公钥)。

有解决方案可以帮助我:

  1. 生成私人&amp;公钥通过 ssh-keygen;
  2. 将公钥(id_rsa.pub)复制到您的用户设置 (HTTP:// <jenkins_server>:8080 /用户/ <jenkins_user_name> /配置);
  3. 修改~/.ssh/config文件:您应该将 jenkins_user_name 添加到ProxyCommand行:

    ProxyCommand ssh -p <port> <jenkins_user_name>@<jenkins_server> diagnose-tunnel -suffix .<jenkins_server> %h

  4. 还需要添加User <jenkins_user_name>IdentityFile /path/to/private_key如何编写@sotona