Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationEventAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.


macOS に Homebrew で sshpass をインストールする

パスワード認証より公開鍵認証の方が望ましいことは言わずもがなであるが、世の中には色々と事情というものがあり、毎回 ssh 接続時にパスワードを手入力しないといけないような状況も存在する。

そのような場合に sshpass でパスワードを省略する方法が存在する。


brew install sshpass
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.

Homebrew で sshpass をインストールしようとすると、「エラー:"sshpass" なんて名前のフォーミュラはない。素人が SSH のセキュリティを台無しにするので sshpass は追加しない。」とキレられる。

novice SSH users ではないことを証明し、目の前の課題を解決すべく、別の手段を検討する。


brew install http://git.io/sshpass.rb

git.io でショート URL を生成しているすかした奴が居る。

賢明なる諸兄はすでにリダイレクト先のソースを確認していることと思うが、 http://git.io/sshpass.rb のリダイレクト先は https://gist.githubusercontent.com/lalyos/28b35c29d4f8d2c1f293/raw/sshpass.rb である。
Gist のページは https://gist.github.com/lalyos/28b35c29d4f8d2c1f293 になる。

ここで追加されるのは 2011-08-06 リリースの sshpass 1.05 になる。最新版は 2016-06-30 リリースの 1.06 なので注意されたい。


Gist で sshpass.rb を検索すると、現存する最も古い投稿は 2011-12-23 の Stefano Verna (stefanoverna) の sshpass.rb のようだ。


brew install https://gist.github.com/M-Barnett/1a22f49394f17364c1eaf39006e87c91/raw/2d95d1075772069fe2fa834194072055e3c50db1/sshpass.rb

lalyos/sshpass.rb をフォークしてバージョンアップしている上記を利用するといいだろう。

その他の sshpass.rb



brew create

brew create URL [--autotools|--cmake|--meson] [--no-fetch] [--set-name name] [--set-version version] [--tap user/repo]:
    Generate a formula for the downloadable file at URL and open it in the editor.
    Homebrew will attempt to automatically derive the formula name
    and version, but if it fails, you'll have to make your own template. The wget
    formula serves as a simple example. For the complete API have a look at

    If --autotools is passed, create a basic template for an Autotools-style build.
    If --cmake is passed, create a basic template for a CMake-style build.
    If --meson is passed, create a basic template for a Meson-style build.

    If --no-fetch is passed, Homebrew will not download URL to the cache and
    will thus not add the SHA256 to the formula for you. It will also not check
    the GitHub API for GitHub projects (to fill out the description and homepage).

    The options --set-name and --set-version each take an argument and allow
    you to explicitly set the name and version of the package you are creating.

    The option --tap takes a tap as its argument and generates the formula in
    the specified tap.

brew create https://.../sshpass-1.06.tar.gz

brew create https://downloads.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz

sshpass の URL を指定して brew create を試してみる。

Error: sshpass is blacklisted for creation.
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.

If you really want to create this formula use --force.

どうしても作りたいなら --force オプションを使えと。

brew create https://downloads.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz --set-name sshpass --set-version 1.06 --force

--force オプションと、ついでに名前とバージョンも渡してやると、Vim が起動する。

# Documentation: https://docs.brew.sh/Formula-Cookbook
#                http://www.rubydoc.info/github/Homebrew/brew/master/Formula
class Sshpass < Formula
  desc ""
  homepage ""
  url "https://downloads.sourceforge.net/project/sshpass/sshpass/1.06/sshpass-1.06.tar.gz"
  version "1.06"
  sha256 "c6324fcee608b99a58f9870157dfa754837f8c48be3df0f5e2f3accf145dee60"
  # depends_on "cmake" => :build

  def install
    # ENV.deparallelize  # if your formula fails when building in parallel
    # Remove unrecognized options if warned by configure
    system "./configure", "--disable-debug",
    # system "cmake", ".", *std_cmake_args
    system "make", "install" # if this fails, try separate make/make install steps

  test do
    # `test do` will create, run in and delete a temporary directory.
    # This test will fail and we won't accept that! For Homebrew/homebrew-core
    # this will need to be a test that verifies the functionality of the
    # software. Run the test with `brew test sshpass`. Options passed
    # to `brew install` such as `--HEAD` also need to be provided to `brew test`.
    # The installed folder is not in the path, so use the entire path to any
    # executables being tested: `system "#{bin}/program", "do", "something"`.
    system "false"

テンプレートが表示されるので deschomepage を指定する。

属性 内容
desc ソフトウェアの1行の説明。ソフトウェアと Homebrew のメンテナーの概要を知るために使用する。brew info 実行時に表示される。
homepage ソフトウェアのホームページ。例えばパッチ提出の連絡先としてソフトウェアと Homebrew メンテナーに関する詳細情報を入手するために使用する。brew home を実行すると開ける。
mirror Additional URLs for the #stable version of the formula. These are only used if the url fails to download. It's optional and there can be more than one. Generally we add them when the main url is unreliable. If url is really unreliable then we may swap the mirror and url.
sha256 To verify the #cached_download's integrity and security we verify the SHA-256 hash matches what we've declared in the Formula. To quickly fill this value you can leave it blank and run brew fetch –force and it'll tell you the currently valid value.
url The URL used to download the source for the #stable version of the formula. We prefer https for security and proxy reasons. If not inferrable, specify the download strategy with :using => …
version The version string for the #stable version of the formula. The version is autodetected from the URL and/or tag so only needs to be declared if it cannot be autodetected correctly.

sshpass のオプション

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

-p オプションは履歴にパスワードが残るので望ましくないだろう。ヘルプにも "unwise" (賢くない)と書かれている。

環境変数 SSHPASS にパスワードを指定する -e オプションも ps コマンドで表示可能のようだ。1

sshpass と ssh の組合せ

sshpass -f ~/.ssh/parole ssh hostname
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Help us understand the problem. What are the problem?