公開鍵認証またはexpect(1)を使用せずにSSHを自動化する
-
06-07-2019 - |
質問
パスワードをsshに自動的に渡す方法はありますか。何らかの方法でsshにstdinまたはファイルからパスワードを読み取らせることにより、公開キー認証を使用せずに サーバーに自動的にsshを実行したいです。
そのようにする必要があるのは、cronジョブとして実行されているrsync / sshを使用してサーバーにファイルをバックアップしたいからです。このサーバーは、ホームディレクトリを で認証した後にマウントするため、〜/ .sshはログインが成功するまで利用できないため、公開キー認証の使用は機能しません。 cronジョブとして実行したいので、expect(1)は問題外です。また、cronジョブは端末で実行されないため、expect / sshの組み合わせは機能しません。私はそのサーバーへのルートアクセス権を持っていないため、管理者がそこで動作する方法を変更することは困難です。
解決
sshpass
を使用します。
たとえば、パスワードが password.txt
ファイルにある場合:
sshpass -fpassword.txt ssh username@hostname
(同様の質問に対する回答から取得)
他のヒント
expectはcronジョブとして実行したいので問題外です。 また、cronジョブは端末で実行されないため、expect / sshの組み合わせ 動作しません
cronからexpectスクリプトを実行できます。少なくとも" pexpect"のようなexpectライブラリを使用するとできます。 Python用。これを確認するためにテストしたところ、cronからpexpect scp / sshスクリプトを実行し、cronで実行されているPythonスクリプトからファイルを正常にscpできました。
サンプルコード:
#!/usr/bin/python
import pexpect
FILE="/path/to/file"
REMOTE_FILE=""
USER="user"
HOST="example.com"
PASS="mypass"
COMMAND="scp -oPubKeyAuthentication=no %s %s@%s:%s" % (FILE, USER, HOST, REMOTE_FILE)
child = pexpect.spawn(COMMAND)
child.expect('password:')
child.sendline(PASS)
child.expect(pexpect.EOF)
print child.before
パスワードを渡すのではなく、公開/秘密キーシステムを使用します。マシンの公開キーを、接続するすべてのマシンの許可キーリストに追加します。この方法を使用すると、SSHはキーを自動的に検証でき、パスワードは不要です。
ここで手順を見つけることができます: http://linuxproblem.org/art_9.html
質問をより注意深く読んだので、ユーザーの操作なしでパスワード認証をサポートする別のSSHクライアントを探してみてください。 Googleのクイック検索で、それらが存在することを示唆しました( http:/ /www.derkeiler.com/Newsgroups/comp.security.ssh/2004-12/0134.html )
関連するStackoverflowの質問:
このディスカッションでは、あなたがやろうとしていることについて話します:
http://cygwin.com/ml/cygwin/2004-02 /msg01449.html
管理者にローカルディレクトリを作成してもらうことができない場合、これは機能しません。
SSHには「信頼の飛躍」が必要です。将来の改ざんから最初のハンドシェイクを保護します。 (最初にサーバーが提供するキーを信頼します)
現在利用できるがよく知られていないアプローチの1つは、SSH-SRPを使用することです。これは、相互パスワード知識を使用して、ユーザーを認証し、sshセッションを安全に暗号化するために必要なセッション暗号化キーを提供します。
SSHの最初の「私を信頼して」よりもはるかに安全です。キーの長期保存は必要ありません。
expect、pexpectなどを使用してパスワードを入力しないでください。それを行う場合、パスワードは平文のどこかにある必要がありますが、実際にはパスワードなしの公開/秘密キーのペアを使用するよりも少ない安全です。そして、もっと手間がかかります!
「SSH:The Definitive Guide」からこのページを読むあなたのオプションの議論のために: http://www.snailbook.com/faq/no-passphrase.auto。 html
公開鍵認証の仕組みを誤解しました。リモートのホームディレクトリにアクセスする必要はありません。ローカルの公開キーをリモートの authorized_keys
ファイルに入れるだけです。周りにグーグルがいて、たくさんのガイドがあります。