非インタラクティブSSHセッション
リモートサーバーでインタラクティブセッションを必要としない場合は、Automatorの[ シェルスクリプトの実行]アクションの一部など、がssh
ない環境で実行できます。tty
呼び出されたときにパスワードを標準出力に出力するプログラムを作成する必要があります。たとえば、次のbashスクリプトを使用して、を使用して実行可能にする必要がありますchmod +x pwd.sh
。
#!/usr/bin/env bash
echo "password"
次に、SSH_ASKPASS
環境変数をこのプログラムへのパスに設定ssh
し、Automatorアクションで次のように実行します。
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
がなくtty
、SSH_ASKPASS
かつDISPLAY
(X11の場合、デフォルトで設定されている)が設定されている場合、SSHはで指定されたプログラムを実行し、SSH_ASKPASS
その出力をパスワードとして使用します。これは、グラフィカル環境で使用することを目的としているため、ウィンドウがポップアップしてパスワードを要求できます。この場合、ウィンドウをスキップして、プログラムからパスワードを返しました。security
代わりに、次のようにキーチェーンから読み取ることができます。
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls
(ssh
コマンドライン)は、ssh
がログインしたときに実行されるコマンドで、その出力はAutomatorに出力されます。もちろん、ファイルにリダイレクトして、起動したプログラムの出力をログに記録することもできます。
を使用したインタラクティブなSSHセッション sshpass
ダウンロードしてコンパイルし、インストールしたところsshpass
、問題なく動作しました。これが私がしたことです:
- Apple開発者ツールを入手する
- ダウンロードして開く
sshpass-1.05.tar.gz
- ディレクトリにシェルを開きます
sshpass-1.05
- 走る
./configure
- 走る
make
- 実行する
make install
(必要な場合がありますsudo
)
これでプログラムがにインストールされました/usr/local/bin/sshpass
。次のような行を使用して実行します。
sshpass -pYourPassword ssh username@hostname
security
それを行う直前からパスワードを読み取り、次のように使用できます。
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
これをシェル関数で囲み、たとえばssh-yourhostname
、タイプするだけで接続でき、自動的にパスワードを取得して入力します。
STDIN is not a terminal
。2)とのインタラクティブセッションのsshpass
場合、-p
オプションは明らかに何もしません。しかしsshpass
、SSH_ASKPASS
設定中に実行しても機能します!