前言 sshpass是ansible密码输入的必要条件,在Linux中使用yum install sshpass或者apt-get install sshpass都可以轻松安装,但在macOS新版本中由于安全原因无法直接使用brew install sshpass,需要采用其它安全的办法绕过。
更新历史 2020年10月13日 - 初稿
阅读原文 - https://wsgzao.github.io/post/sshpass/ 
 
使用sshpass的场景 在macOS下使用ansible命令(inventory文件中使用了密码验证的方式)或者使用iTerm2来完成自动密码填充等场景会使用到sshpass。
比如下面的样例:Inventory文件中使用了ansible_ssh_pass选项
1 2 3 4 5 6 7 8 9 10 11 cat  hosts10.10.66.66 ansible_port=22 ansible_user=root ansible_ssh_pass=test666 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强制安装也不行
1 2 3 4 5 6 7 brew install sshpass -f Updating Homebrew... Error: No available formula with the name "sshpass"  We won't add sshpass because it makes it too easy for novice SSH users to  ruin SSH' s security.
 
可以通过下面的命令进行安装
1 2 3 4 5 6 7 brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb Error: Calling Non-checksummed download of sshpass formula file from an arbitrary URL is disabled! Use 'brew extract'  or 'brew create'  and 'brew tap-new'  to create a formula file in  a tap on GitHub instead. wget https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb brew install sshpass.rb 
 
sshpass.rb文件内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 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 
 
如果(因为众所周知的网络原因)通过brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb的方式不能正常工作,可以将上面rubby脚本sshpass.rb的内容拷贝到本地执行 brew install sshpass.rb
再次尝试安装提示缺少xcode-select命令行工具,可以通过xcode-select --install进行安装
1 2 3 4 5 6 7 8 brew install sshpass.rb Error: Xcode alone is not sufficient on Mojave. Install the Command Line Tools:   xcode-select --install xcode-select --install xcode-select: note: install requested for  command  line developer tools 
 
安装完xcode-select之后重新执行brew install命令,sshpass安装成功。
1 2 3 4 5 6 7 8 9 brew install sshpass.rb Updating Homebrew... ==> Downloading http://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz ==> Downloading from https://jaist.dl.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.g ==> ./configure --prefix=/usr/local/Cellar/sshpass/1.06 ==> make install 🍺  /usr/local/Cellar/sshpass/1.06: 9 files, 41.6KB, built in  33 seconds