我已经在这2天内苦苦挣扎了。
我有2台Linux机器A和B,并尝试远程运行以下命令(因为它将在本地B上完成):
sshpass -p' somePassword' ssh userName @ machineB" wget http://someUrl.com/someFile.zip"
someFile.zip应该下载并保存在B上但我得到连接超时。 在macnine B上运行此命令可以正常工作。我认为SSH存在一些问题。
TeamCity持续集成需要此脚本。
P.S。 sshpass只是一个通过ssh运行命令的实用程序,无需用户交互,只需指定密码即可。
问题是什么以及如何解决?谢谢。
更新:应在〜/ .bashrc文件中为非交互式会话指定代理设置。原因是代理设置位于/ etc / profile中,仅适用于交互式会话。
答案 0 :(得分:2)
我没有尝试过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到B进行ssh。
以下命令甚至可以通过cronjob在我的系统上运行:
ssh -i ~/.ssh/id_rsa foobar.local 'curl -O https://www.google.com/logos/doodles/2014/rubiks-cube-5658880499515392-res.png'