web-dev-qa-db-ja.com

公開キーとExpectを使用せずに、bashスクリプト内のsshコマンドにパスワードを提供します

スクリプト内でSSHを使用したいのですが、このスクリプトは私のマシンでは実行されません。

私の実装には2つの制限があります。

  • 私はシェルの標準の外で作業することはできません。したがって、このマシンで使用可能かどうかわからないため、expectを使用できません。
  • このマシンにpublic keysSSHを表します。

可能なオプション-ソリューションは何ですか?

追加の依存関係を追加せずに、自動化された安全な方法で要求されたパスワードをsshに提供するにはどうすればよいですか?

スクリプト内でパスワードを提供することは可能ですか?

よろしくお願いします:)

19
stratis

まず第一に:平文に秘密を入れないでくださいnlessなぜそれが安全なことなのか知っています秘密を知っている攻撃者によって行われます)。

スクリプトにシークレットを追加しても問題ない場合は、sshキーを同梱してssh-agentシェルで実行できます。

#!/usr/bin/env ssh-agent /usr/bin/env bash
KEYFILE=`mktemp`
cat << EOF > ${KEYFILE}
-----BEGIN RSA PRIVATE KEY-----
[.......]
EOF
ssh-add ${KEYFILE}

# do your ssh things here...

# Remove the key file.
rm -f ${KEYFILE}

Sshキーを使用する利点は、 forced commands を使用して、キーホルダーがサーバー上で実行できることを制限できることです。

より安全な方法は、スクリプトでssh-keygen -f ~/.ssh/my-script-keyを実行してこの目的専用の秘密キーを作成することですが、公開キーをサーバーに追加するためのルーチンも必要になります。

11
Anders Lindahl

Sshpassをインストールしてから、コマンドを起動します。

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no yourusername@hostname
29
gino pilotino

セキュリティ上の理由から、コマンドラインでパスワードを入力しないでください。そうしないと、psコマンドを実行しているユーザーがパスワードを見ることができます。次のような sshpass ユーティリティを使用することをお勧めします。

#!/bin/bash

export SSHPASS="your-password"
sshpass -e ssh -oBatchMode=no sshUser@remoteHost

興味があるかもしれませんBashスクリプトのパスワードでsftpコマンドを実行する方法?

17
anubhava

私の知る限り、キーを使用する以外にコマンドラインバージョンsshを使用している場合は期待できません。しかし、C、python、phpなどのほとんどのプログラミング言語用のライブラリバインディングがあります。そのような言語でプログラムを書くことができます。これにより、パスワードを自動的に渡すことができます。しかし、これは、パスワードがそのプログラムにプレーンテキストで保存されるため、もちろんセキュリティ上の問題です

1
hek2mgl