【问题标题】:Run wget command via ssh remotely but connection timeout通过 ssh 远程运行 wget 命令但连接超时
【发布时间】:2014-07-07 02:57:16
【问题描述】:

我已经为此苦苦挣扎了 2 天。

我有 2 台 linux 机器 A 和 B,并尝试从 A 远程运行以下命令(就像在 B 本地完成一样):

sshpass -p 'somePassword' ssh userName@machineB "wget http://someUrl.com/someFile.zip"

someFile.zip 应该下载并保存在 B 上,但我得到连接超时。 在 macnine B 上直接运行此命令可以正常工作。我认为 SSH 存在一些问题。

TeamCity 持续集成需要此脚本。

附言sshpass 只是一个通过 ssh 运行命令的实用程序,无需用户通过指定密码进行交互。

什么问题以及如何解决?谢谢。

更新: 代理设置应在 ~/.bashrc 文件中指定用于非交互式会话。原因是代理设置位于 /etc/profile 中,它仅适用于交互式会话。

【问题讨论】:

  • A 和 B 是如何连接的?
  • 通过 SSH。 A 运行连接到 B 的命令以执行“wget someUrl.com/someFile.zip
  • 顺便说一句,手动执行此操作也可以正常工作,如下所示: ssh userName@machineB Password: ***** Connected... wget someUrl.com/someFile.zip Resolving someproxy.mySite.com... IP 连接到 someProxy.mySitecom|IP|:8080... 已连接。已发送代理请求,等待响应... 200 OK 长度:22873 (22K) [application/zip-archive] 保存到:`someFile.zip'

标签: linux ssh wget


【解决方案1】:

我没有尝试过 sshpass,但我的猜测是连接超时是 A 连接到 B,而不是 B 发出 HTTP 请求。我建议改用 SSH 密钥,我很确定这对你有用。

要设置 ssh 密钥,请在 A 上运行此命令:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -N ''

以上将创建一个长度为 4096 位且没有密码短语 (-N '') 的 SSH RSA 密钥对。它在~/.ssh中写入两个文件;将公钥复制到 B:

scp ~/.ssh/id_rsa.pub B:

在服务器 B 上执行此操作:

mkdir ~/.ssh chmod 0700 ~/.ssh cat id_rsa.pub >> ~/.ssh/authorized_keys chmod 0600 ~/.ssh/authorized_keys

在启用了 SELinux 的 RedHat 系统上,可能需要运行以下命令以使系统接受使用授权密钥文件:

restorecon -R -v ~/.ssh

以上允许包含authorized_keys文件中列出的任何公钥的私钥的服务器通过SSH进入机器。

设置完成后,您应该能够在没有密码的情况下从 A SSH 到 B。

即使通过 cronjob,以下命令也可以在我的系统上运行:

ssh -i ~/.ssh/id_rsa foobar.local 'curl -O https://www.google.com/logos/doodles/2014/rubiks-cube-5658880499515392-res.png'

【讨论】:

  • 感谢 berto 提供有关密钥的想法。我按照你写的做了,但它需要用户的密码。输入密码后,它会连接我,但问题没有解决。
  • 如果您创建了密钥并且它要求您输入密码,则密钥、您的 .ssh 目录或主目录可能存在权限问题。 SSH 对文件权限非常特别。确保你的主目录权限是 0755,.ssh 是 0700,~/.ssh/id_rsa* 在 A 上是 0600,~/.ssh/authorized_keys 在 B 上是 0600。也可以尝试运行我给你的带有 -v 标志的 ssh 命令,看看它是否提供向上 id_rsa 作为身份验证机制。
  • 更新:这是调试信息:读取配置数据 /etc/ssh/ssh_config 身份文件 $HOME/.ssh/id_rsa 类型 1 主机“B”是已知的,并且与 RSA 主机密钥匹配。在 HOME/.ssh/known_hosts 中找到密钥:1 ssh_rsa_verify:签名正确 除非获得授权,否则禁止访问此计算机 可以继续的身份验证:调试 1:提供公钥:HOME/.ssh/id_rsa 调试1:可以继续的身份验证:公钥、密码,keyboard-interactive debug1: 下一个认证方式:keyboard-interactive 密码:
  • 主机 A 和 B 分别是 Linux SUSE 11 和 Linux RedHat。我刚刚尝试在 2 个 Linux SUSE 中做同样的事情,它可以工作!似乎 Red Hat Linux 上的某些东西妨碍了。
  • 啊,那可能是 RedHat 上的 SELinux 阻止了密钥的使用。看看下面的评论,尤其是restorecon 行:stackoverflow.com/a/9741581/703144
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-26
相关资源
最近更新 更多