前言
sshpass是ansible密码输入的必要条件,在Linux中使用yum install sshpass或者apt-get install sshpass都可以轻松安装,但在macOS新版本中由于安全原因无法直接使用brew install sshpass,需要采用其它安全的办法绕过。
使用sshpass的场景
在macOS下使用ansible命令(inventory文件中使用了密码验证的方式)或者使用iTerm2来完成自动密码填充等场景会使用到sshpass。
比如下面的样例:Inventory文件中使用了ansible_ssh_pass选项
# 编辑inventory
cat hosts
10.10.66.66 ansible_port=22 ansible_user=root ansible_ssh_pass=test666
# 使用ansible命令会失败,提示缺少sshpass
ansible all -i test.hosts -m ping
10.10.66.66 | FAILED! => {
"failed": true,
"msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"
}
安装sshpass及各种常见小问题处理
直接brew install会提示不安全,被拒绝,brew install —force强制安装也不行
可以通过如下方法进行安装
# 先将文件下载至本地,然后执行安装命令
❯ wget https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb
# 执行如下命令虽然提示了一个错误,但是也顺利安装成功了
❯ brew install sshpass.rb
Error: Failed to load cask: sshpass.rb
Cask 'sshpass' is unreadable: wrong constant name #<Class:0x00007fb25716b2d0>
Warning: Treating sshpass.rb as a formula.
==> Downloading http://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz
==> Downloading from https://cfhcable.dl.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz
######################################################################## 100.0%
Warning: A newer Command Line Tools release is available.
Update them from Software Update in System Preferences or run:
softwareupdate --all --install --force
If that doesn't show you any updates, run:
sudo rm -rf /Library/Developer/CommandLineTools
sudo xcode-select --install
Alternatively, manually download them from:
https://developer.apple.com/download/all/.
You should download the Command Line Tools for Xcode 13.0.
==> ./configure --prefix=/usr/local/Cellar/sshpass/1.06
==> make install
🍺 /usr/local/Cellar/sshpass/1.06: 8 files, 77.9KB, built in 13 seconds
可能会由于网络问题,导致无法直接下载sshpass.rb,所以贴上脚本源码
cat >> sshpass.rb <<EOF
require 'formula'
class Sshpass < Formula
url 'http://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz'
homepage 'http://sourceforge.net/projects/sshpass'
sha256 'c6324fcee608b99a58f9870157dfa754837f8c48be3df0f5e2f3accf145dee60'
def install
system "./configure", "--disable-debug", "--disable-dependency-tracking",
"--prefix=#{prefix}"
system "make install"
end
def test
system "sshpass"
end
end
EOF